[Calcul multiplateforme] résultats différents Mac / Linux
Bonjour à tous,
je suis en train de développer un programme de simulation multiplateforme Mac/Linux, qui travaille sur du calcul flottant.
Il est essentiel que ce programme donne les mêmes résultats sur les différentes plateformes cible.
Je pensais que tout irait bien, compte tenu des normes IEEE sur les calculs flottant. Or, dans certains cas, des différences apparaissent au fur et à mesure des calculs. Il semblerait que cela soit le cas surtout lorsque je fais de nombreux tests (==, <=) sur les flottants dans la boucle de calcul.
Quelqu'un aurait-il une idée pour corriger ce BIG BIG problème, ou un lien sur le net (je n'ai rien trouvé moi même) ?
Merci !
Nico
Pour info :
- le code est élémentaire : tests conditionnels, additions, multiplications, divisions, c'est tout (pas de racine, logarithmes...).
- j'ai compilé sur Linux 2.4 avec gcc, sur mac OS X.3 avec gcc. Dans les deux cas sans optimisation.
Re: [Calcul multiplateforme] résultats différents Mac / Linu
Citation:
Envoyé par Nicolas38
Bonjour à tous,
Je pensais que tout irait bien, compte tenu des normes IEEE sur les calculs flottant. Or, dans certains cas, des différences apparaissent au fur et à mesure des calculs. Il semblerait que cela soit le cas surtout lorsque je fais de nombreux tests (==, <=) sur les flottants dans la boucle de calcul.
tu les fait comment tes comparaison ?
ne jamais faire directement de comparaison impliquand une egalite entre des flottant ... toujours rajouter un epsilon.
soit dit en passant les resultats sur des flottant sont susceptible de changer entre differents couple compilateur/processeur .. c'est normal
Re: [Calcul multiplateforme] résultats différents Mac / Linu
Citation:
Envoyé par dok3
soit dit en passant les resultats sur des flottant sont susceptible de changer entre differents couple compilateur/processeur .. c'est normal
Oui, c'est ce que j'ai compris avec quelques lectures depuis.
Mais il reste que les normes IEEE devraient (quand on les lit !) permettre d'éviter cela. Et je suis assez certain que ce doit être faisable, compte tenu de l'importance de la chose !
Auriez vous une piste pour ça : document à lire, article qui y fait référence, options de compilation qui "forcent" le respect d'une norme, etc. ?
Pour ce qui est des comparaisons, je fais ça avec des < ou >, et parfois avec des <= et >= .
Pour ce qui est des "epsilon", ma fois, j'étais au courant, mais en même temps le fichier limits.h définit ses propres "epsilon"... et oui, je l'avoue, le code dont je parle est une bibliothèque C, pas C++ .
A moins que C++ soit blindé face à ces problèmes (ce dont je doute, cf le "quote" de dok3 ci dessus), et que le HIC provienne du code en C - de sorte que je doive reposer ces questions sur le forum C ?
Re: [Calcul multiplateforme] résultats différents Mac / Linu
Pourtant il a dit:
Citation:
Envoyé par Nicolas38
- j'ai compilé sur Linux 2.4 avec gcc, sur mac OS X.3 avec gcc. Dans les deux cas sans optimisation.
On pourrait éventuellement comparer le code assembleur généré ? Les machines n'étant pas les mêmes çà me parait tendu http://membres.lycos.fr/rolka/pics/hat.gif