|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : avril 2008 Messages : 17 ![]() |
Bonjour à tous,
je sollicite votre aide pour un truc qui me laisse vraiment perplexe. Sous SAS j'effectue l'opération suivante : 66001042444 * 2.07 qui me donne bien le résultat attendu : 136622157859,08. Pour vérifier la précision de la variable résultante j'ai fait ceci : Code :
![]() C'est très génant puisque je développe un module de vérification de précision et que SAS introduit des imprécisions ici. Quelqu'un saurait comment résoudre le phénomène (et l'expliquer si possible )? |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 138 ![]() |
Il est probable que ce soit lié au format que tu utilises. Vérifie le format de ta variable. Par exemple, le format best12: numérique avec 12 chiffres/point maximum, sas choisi la meilleure notation de sorte à tronquer le moins possible. Les décimales pourront être tronquées s’il n’y a pas assez de place, voir les entiers.
A toi de choisir le format qui correspond le mieux, tu peux par exemple passer en best16. voire plus, ou choisir un autre format http://support.sas.com/onlinedoc/913...a001263753.htm |
|
|
10
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : avril 2008 Messages : 17 ![]() |
Merci pour ta réponse Manoutz.
Je dois dire que malgré le changement de format, le problème demeure : Code :
|
||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 138 ![]() |
et si tu mets un best20. sur int_tronc1 ca donne quoi?
|
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 138 ![]() |
tu peux aussi forcer le nombre de décimales en utilisant un format de type w.d
(exemple 20.2) |
|
|
10
|
|
|
#6 |
|
Invité de passage
![]() Inscription : avril 2008 Messages : 17 ![]() |
Tu es grand Manoutz,
!Tu viens de m'apprendre un truc énorme, j'avais jamais tilté que le format BEST laissait SAS choisir le format le plus pertinent. Merci |
|
|
00
|
|
|
#7 |
|
Membre expérimenté
![]() Inscription : avril 2009 Messages : 537 ![]() |
c'est parce que tu crois que le résultat de int_tronc1 est 136622157859.08
mais ce n'est pas le cas! pourquoi ? Une des raisons est que SAS code les chiffres sur 8 bits, donc pour des chiffres a virgule il peut y avoir une perte de précision quand les chiffres sont gros. Fait le même calcul sous Excel tu verras le même résultat. xav |
|
|
10
|
|
|
#8 |
|
Invité de passage
![]() Inscription : avril 2008 Messages : 17 ![]() |
Je ne suis pas sûr de te suivre xav2229.
J'ai recalculé int_tronc1 sur Excel 2007 et j'ai bien trouvé le résultat 136622157859.08 Ensuite, le problème pour moi n'est pas la perte de précision mais une gestion bizarre des décimales, puisque si Excel a raison (et ma calculatrice), pourquoi SAS transforme le .08 en .07998... ? Par contre, si j'ai saisi l'idée, tu me dis que c'est impossible de régler ca du fait de la gestion mémoire des nombres sous SAS. C'est bien ça ? |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 138 ![]() |
Xav ou moi, le message est le même!
Vérifie la valeur exacte de 66001042444. La valeur affichée doit être arrondie, car si tu multiplie par 2.07, ca peut pas donner qqc à 10 décimales. Sous excel tu peux aussi appliquer des formats |
|
|
10
|
|
|
#10 |
|
Membre expérimenté
![]() Inscription : avril 2009 Messages : 537 ![]() |
A tester sous Excel :
A1 = 66001042444 B1 = 2,0700 C1 = B1*A1 C2 = 136622157859 Que vaut D2 quand D2=C1-C2 ? et choisit 30 chiffres après la virgule |
|
|
10
|
|
|
#11 | ||
|
Invité de passage
![]() Inscription : avril 2008 Messages : 17 ![]() |
J'espère que vos messages ne sont pas les même.
Je n'ai pas besoin de vérifier la valeur de 66001042444 puisque je la rentre en dur. Si tu exécutes le code ci-dessous, tu devrais constater l'erreur, les formats ne faisant que masquer le problème. Code :
|
||
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : avril 2008 Messages : 17 ![]() |
Mea culpa, je me suis pris à douter de SAS plutôt que des autres sources.
Merci à vous deux. |
|
|
00
|
|
|
#13 | ||
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 138 ![]() |
tu peux palier au problème en utilisant la fonction mod
Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com