un calcul de virgule flottante peut varier sur différents processeurs? (+ Passage double entre C # et C)

StackOverflow https://stackoverflow.com/questions/2335529

Question

J'ai une demande écrite en C # qui invoque un code C ainsi. Le code C # obtient des doubles comme une entrée, effectue quelques calculs sur elle, passer à la couche native qui exécutent ses propres calculs sur elle, et puis passe à la couche arrière C #.

Si je cours les mêmes exe / dll sur des machines différentes (elles sont toutes x64 par Intel), est-il possible que le résultat final, je vais sera différent sur des machines différentes?

Était-ce utile?

La solution

Si vous utilisez le même exécutable (s), les résultats devraient être les mêmes. Cependant, il convient de noter que les calculs à virgule flottante sont généralement hautement personnalisable par un certain nombre de paramètres persistants (mode infini, mode d'arrondi, etc.). Cela signifie que la même instruction à virgule flottante peut produire des résultats différents en fonction de la combinaison actuelle de paramètres. Si votre application veille à ce que tous ces paramètres sont remis à zéro aux mêmes valeurs au début de l'exécution, les résultats devraient être les mêmes. Toutefois, si certains de ces paramètres ne sont pas remis à zéro, ou dépendent des paramètres externes (comme des variables d'environnement), puis dans certaines circonstances, vous pourriez finir par observer des résultats différents sur des machines différentes.

Autres conseils

matériel lui-même devrait tout devrait tous le faire de la même façon, en supposant qu'ils mettent en œuvre des opérations à virgule flottante IEEE, et je pense que la plupart (tous?) Faire.

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

La plupart du matériel moderne est standardisé, comme la définition de double. Vous pouvez vérifier que les deux utilisent le même type en vérifiant l'empreinte mémoire de chaque variable -. Par exemple sizeof (x)

devrait également quelques informations au sondage en float.h.

D'après ce que je me souviens, int tend à être plus problématique en termes de cohérence. Certains par défaut à 2 octets, d'autres à 4, mais vous pouvez toujours utiliser longtemps pour obtenir une taille.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top