Historique des modifications - Message

Message #2785

Sujet: Bizzareries avec des f64 (donc les doubles)


Type Date Auteur Contenu
Création du message 01-08-2007 06:02:58 Nebu
Merci Jerry Kan pour ta réponse.
Je vais essayer de t'eclairer un peu sur ce problème.

Lorsque je fait ceci
f64 temp = ((dayspeed/86400.0)/1000.0)*dTime;
Et que j'affiche temp, j'ai bien la bonne valeur pour temp (qui est entre 0.005 et 0.007 avec plusieurs chiffres apres la virgule) comme je l'ai dit j'ai besoin d'une precision d'environs 6 a 10 chiffres apres la virgule.

Lorsque j'affiche J a son initialisation, son ordre de grandeur est du million avec 2 chiffres apres la virgule (je n'ai pas le code sous les yeux, donc je ne connais pas la valeur exact). Tout au long du déroulement, il ne dépassera pas l'ordre du million, et les 6 a 10 chiffres apres la virgule.

dTime est le différentiel en ms entre chaque frame.
dayspeed vaut 5000 et ne depassera jamais cette valeur.

Je perd la précision lorsque j'effectue l'addition J+temp.
Si j'affiche J apres cette addition, j'obtiens la valeur initiale de J
Et lorsque juste apres je fait le printf (qui comme tu l'as dit semble etre un débordement) J prend bien la valeur J+temp (exactement la bonne valeur a 10 chiffres apres la virgule pres)
Penses tu qu'un debordement permettrais d'obtenir le bon resultat au bon endroit dans la memoire oO?

Sinon lorsque je desactive l'option /arch:SSE2, le programme compile, mais le fait de faire le printf n'affecte pas la valeur correct a J

Par ailleurs, j'ai pensé a decomposer le calcul et le tourner autrement, ca n'as pas résolu mon pb vu que je perd la precision seulement lorsque j'addition temp a J. D'apres ce que tu m'as dit ce serais donc du au fait que J est tellement grand par rapport a temp que le proc le concidère égal a 0.
Connaitrais tu un moyen de savoir si le processeur effectue bel et bien cette approximation ? (faire le test temp == 0 marcherais peut etre ?)

De ce fait la premiere idée qui me viens a l'esprit serais donc de concerver dans un int la partie entiere de J et dans un double la partie décimale, d'effectuer mes calculs et lorsque ma partie décimale depasse 1, j'addition sa partie entiere a ma partie decimale. J'aurais donc une partie décimale qui ne vaudra pas plus de 1 a additionner a mon temp qui vaut entre 0.005 et 0.007 le calcul devrais etre OK.

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
126 invités en ligne
membre en ligne: -
RSS Feed