Bonjour,
Voilà mon problème :
- Ma chaine szParam (char [500]) contient "5000000000000039" (avec \0 à la fin). (pour info il y a 13 "0")
- Je dispose d'une variable dCodePgmTri (double) ; (petite précision au cas où : cette variable fait partie d'une structure et j'utilise un tableau de cette structure)
- Je fais dCodePgmTri = atof (szParam)
Je compile mon programme sous W2000 (avec Visual C++ 6.0) et sous Unix HP (via gcc).
Sous W2000, la conversion de ma valeur fonctionne parfaitement, par contre sous Unix HP, la conversion me renvoie "5000000000000040" !!
Je ne dépasse pourtant pas la valeur max d'un double (qui est beaucoup, beaucoup plus grande...j'ai d'ailleurs fait un affichage ecran de DBL_MAX pour m'en assurer).
J'ai constaté que si je mets "38" à la place de "39" (je ne répète pas ici les chiffres qui précèdent), j'obtiens la bonne valeur ; avec 40 j'obtiens 40 et avec 41 j'obtiens aussi 40. Par contre avec 9941 j'obtiens 9920 !
J'ai essayé avec strtod et j'obtiens les mêmes résultats toujours corrects sous W2000 mais parfois incorrect sous Unix...
Ce programme tourne depuis un petit moment et cette erreur n'avait jamais été détectée avant qu'on ne tombe sur la valeur "50...39"
Alors si quelqu'un a une idée, je suis preneur...
Merci d'avance.
Sebastien "quelque peu déboussolé sur ce coup-là"
Partager