Maison >développement back-end >C++ >Comment pouvons-nous obtenir des résultats déterministes à virgule flottante dans .NET ?
Contraindre les calculs à virgule flottante pour obtenir des résultats déterministes dans .NET
Motivés par la recherche de résultats cohérents sur toutes les machines dans .NET, les développeurs se débattent avec le défi du déterminisme à virgule flottante. Sans solutions intégrées telles que fpstrict de Java, le problème semble insurmontable. Alors que certains ont eu recours à des calculs fastidieux en virgule fixe, d'autres ont exploré le potentiel de la conversion explicite.
Comme suggéré par l'ingénieur CLR David Notario, l'insertion de conversions explicites après chaque opération en virgule flottante peut conduire à un comportement prévisible. Cependant, Eric Lippert prévient que le compilateur C# donne simplement un « indice » au moteur d'exécution pour permettre le rétrécissement. Il reste à savoir si cet indice se traduit par les conversions IL nécessaires.
En fouillant dans les spécifications C# et les spécifications CLR, nous confirmons que :
Malgré cela, le casting explicite à lui seul est insuffisant pour garantir la reproductibilité sur toutes les machines. Le CLR permet potentiellement de stocker les résultats dans des registres FPU de plus grande précision lors des calculs intermédiaires. L'attribution à un champ statique ou à un élément de tableau peut également forcer la troncature.
D'autres facteurs, tels que les paramètres FPU, peuvent toujours introduire des variations. Pour garantir une arithmétique véritablement reproductible, il est conseillé aux développeurs d’envisager d’utiliser plutôt des nombres entiers.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!