Vector2.Lerp(Vector2, Vector2, Single) 和 Vector4.Lerp(Vector4, Vector4, Single) 的实现已更改,以正确考虑浮点数舍入误差。
更改描述
以前,Vector2.Lerp(Vector2, Vector2, Single) 和 Vector4.Lerp(Vector4, Vector4, Single) 被实现为 value1 + (value2 - value1) * amount。 但是,由于浮点运算中的舍入误差,此算法在value2为amount时并不总是返回1.0f。
在 .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。