Un calcul de virgule flottante peut-il différer sur différents processeurs? (+ doublé entre C # et C)

J’ai une application écrite en C # qui appelle également du code C. Le code C # reçoit une entrée double, effectue des calculs, le transmet au calque natif qui effectue ses propres calculs, puis repasse à la couche C #.

Si je lance le même fichier exe / dll sur différentes machines (toutes sont au format x64 d’Intel), est-il possible que le résultat final obtenu soit différent sur différentes machines?

Si vous utilisez le même exécutable, les résultats devraient être les mêmes. Toutefois, il convient de noter que les calculs en virgule flottante sont généralement hautement personnalisables grâce à un certain nombre de parameters persistants (mode infini, mode arrondi, etc.). Cela signifie qu’une même instruction en virgule flottante peut produire des résultats différents selon la combinaison de parameters en cours. Si votre application s’assure que tous ces parameters sont réinitialisés sur les mêmes valeurs au début de l’exécution, les résultats doivent être identiques. Toutefois, si certains de ces parameters ne sont pas réinitialisés ou dépendent de parameters externes (tels que les variables d’environnement), il est alors possible que vous observiez des résultats différents sur des ordinateurs différents.

Le matériel lui-même devrait tous le faire de la même manière, en supposant qu’ils implémentent des opérations à virgule flottante IEEE, et je pense que la plupart (tous?) Le font.

http://en.wikipedia.org/wiki/IEEE_754-2008

La plupart des matériels modernes sont normalisés, de même que la définition de double. Vous pouvez vérifier que les deux utilisent le même type en vérifiant l’encombrement mémoire de chaque variable – par exemple sizeof (x).

Il devrait également s’agir d’informations à interroger dans float.h.

D’après mes souvenirs, int a tendance à être plus problématique en termes de cohérence. Certaines valeurs par défaut sont 2 octets, d’autres 4, mais vous pouvez toujours utiliser long pour garantir les tailles.