Behavior Change für Vector2.Lerp und Vector4.Lerp
Die Implementierung von Vector2.Lerp(Vector2, Vector2, Single) und Vector4.Lerp(Vector4, Vector4, Single) wurde so geändert, dass ein Rundungsfehler bei Gleitkommazahlen nun ordnungsgemäß berücksichtigt wird.
Änderungsbeschreibung
Bisher waren Vector2.Lerp(Vector2, Vector2, Single) und Vector4.Lerp(Vector4, Vector4, Single) als value1 + (value2 - value1) * amount
implementiert. Aufgrund eines Rundungsfehlers bei Gleitkommazahlen gibt dieser Algorithmus nicht immer value2
zurück, wenn amount
auf 1.0f
festgelegt ist.
Ab .NET 5 verwendet die Implementierung denselben Algorithmus wie Vector3.Lerp(Vector3, Vector3, Single), nämlich (value1 * (1.0f - amount)) + (value2 * amount)
. Dieser Algorithmus berücksichtigt den Rundungsfehler nun ordnungsgemäß. Wenn amount
nun also auf 1.0f
festgelegt ist, beträgt das Ergebnis genau value2
. Der aktualisierte Algorithmus ermöglicht es auch, dass der Algorithmus mithilfe von MathF.FusedMultiplyAdd (wenn verfügbar) frei optimiert werden kann.
Eingeführt in Version
5.0
Empfohlene Maßnahme
Es ist keine Aktion erforderlich. Wenn Sie das ehemalige Verhalten jedoch beibehalten möchten, können Sie eine eigene Lerp
-Funktion implementieren, die den vorherigen Algorithmus von value1 + (value2 - value1) * amount
verwendet.