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. |
| Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
|---|---|---|---|---|
|
Préférences cookies Corrections |
![]() ![]() ![]() ![]() |
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 |