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

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.

Betroffene APIs