Modifica del comportamento per Vector2.Lerp e Vector4.Lerp
L'implementazione di Vector2.Lerp(Vector2, Vector2, Single) e Vector4.Lerp(Vector4, Vector4, Single) è stata modificata per tenere conto correttamente di un errore di arrotondamento a virgola mobile.
Descrizione delle modifiche
In precedenza, Vector2.Lerp(Vector2, Vector2, Single) e Vector4.Lerp(Vector4, Vector4, Single) erano implementati come value1 + (value2 - value1) * amount
. Tuttavia, a causa di un errore di arrotondamento a virgola mobile, questo algoritmo non restituisce sempre value2
quando amount
è 1.0f
.
In .NET 5 e versioni successive, l'implementazione usa lo stesso algoritmo di Vector3.Lerp(Vector3, Vector3, Single), ovvero (value1 * (1.0f - amount)) + (value2 * amount)
. Questo algoritmo tiene conto correttamente dell'errore di arrotondamento. Ora, quando amount
è 1.0f
, il risultato è esattamente value2
. L'algoritmo aggiornato consente anche di ottimizzare liberamente l'algoritmo usando MathF.FusedMultiplyAdd quando è disponibile.
Versione di introduzione
5.0
Azione consigliata
Non è necessaria alcuna azione. Tuttavia, se si vuole mantenere il comportamento precedente, è possibile implementare la propria funzione Lerp
che usa l'algoritmo precedente di value1 + (value2 - value1) * amount
.