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

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.

API affectées