Changement de comportement pour Vector2.Lerp et Vector4.Lerp
L’implémentation de Vector2.Lerp(Vector2, Vector2, Single) et de Vector4.Lerp(Vector4, Vector4, Single) a été modifiée pour tenir compte correctement d’une erreur d’arrondi à virgule flottante.
Description de la modification
Auparavant, Vector2.Lerp(Vector2, Vector2, Single) et Vector4.Lerp(Vector4, Vector4, Single) étaient implémentés en tant que value1 + (value2 - value1) * amount
. Toutefois, en raison d’une erreur d’arrondi à virgule flottante, cet algorithme ne retourne pas toujours value2
quand amount
est 1.0f
.
Dans .NET 5 et versions ultérieures, l’implémentation utilise le même algorithme que Vector3.Lerp(Vector3, Vector3, Single), qui est (value1 * (1.0f - amount)) + (value2 * amount)
. Cet algorithme prend correctement en compte l’erreur d’arrondi. Maintenant, quand amount
est 1.0f
, le résultat est précisément value2
. L’algorithme mis à jour permet également à l’algorithme d’être optimisé librement à l’aide de MathF.FusedMultiplyAdd lorsqu’il est disponible.
Version introduite
5,0
Action recommandée
Aucune action n'est nécessaire. Toutefois, si vous souhaitez conserver l’ancien comportement, vous pouvez implémenter votre propre fonction Lerp
qui utilise l’algorithme précédent de value1 + (value2 - value1) * amount
.