Dela via


Beteendeförändring för Vector2.Lerp och Vector4.Lerp

Implementeringen av Vector2.Lerp(Vector2, Vector2, Single) och Vector4.Lerp(Vector4, Vector4, Single) ändrades till korrekt konto för ett flyttalsrundningsfel.

Ändra beskrivning

Vector2.Lerp(Vector2, Vector2, Single) Tidigare och Vector4.Lerp(Vector4, Vector4, Single) implementerades som value1 + (value2 - value1) * amount. Men på grund av ett flyttalsrundningsfel returnerar value2 den här algoritmen inte alltid när amount är 1.0f.

I .NET 5 och senare använder implementeringen samma algoritm som Vector3.Lerp(Vector3, Vector3, Single), som är (value1 * (1.0f - amount)) + (value2 * amount). Den här algoritmen står korrekt för avrundningsfelet. Nu, när amount är 1.0f, är resultatet exakt value2. Den uppdaterade algoritmen gör också att algoritmen kan optimeras fritt med när MathF.FusedMultiplyAdd den är tillgänglig.

Version introducerad

5,0

Ingen åtgärd krävs. Men om du vill behålla det gamla beteendet kan du implementera din egen Lerp funktion som använder den tidigare algoritmen value1 + (value2 - value1) * amountför .

Berörda API:er