Vector2.Lerp 和 Vector4.Lerp 的行为变更
Vector2.Lerp(Vector2, Vector2, Single) 和 Vector4.Lerp(Vector4, Vector4, Single) 的实现已更改,以正确考虑浮点数舍入误差。
更改描述
以前,Vector2.Lerp(Vector2, Vector2, Single) 和 Vector4.Lerp(Vector4, Vector4, Single) 实现为 value1 + (value2 - value1) * amount
。 但是,由于浮点数舍入误差,在 amount
为 1.0f
时,此算法不会始终返回 value2
。
在 .NET 5 及更高版本中,该实现使用与 Vector3.Lerp(Vector3, Vector3, Single) 相同的算法,即 (value1 * (1.0f - amount)) + (value2 * amount)
。 此算法可正确考虑舍入误差。 现在,当 amount
为 1.0f
时,结果为精确的 value2
。 更新的算法还允许使用 MathF.FusedMultiplyAdd(如果可用)自由地优化算法。
引入的版本
5.0
建议操作
无需执行任何操作。 但是,如果你想要保留旧行为,则可以实现自己的 Lerp
函数,使用先前的算法 value1 + (value2 - value1) * amount
。
受影响的 API
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈