Aller au contenu

bug de calcul très vicieux


Messages recommandés

Posté(e)

Bonjour aux maniaques du clavier (pas comme Bach)

Ce qui m'amène aujourd'hui sur le forum

ne concerne pas AutoCad, ou plutôt pas que AutoCad,

voilà, en programmant je suis tombé sur une erreur de calcul qui semble être due

au processeur.

Essayez de faire cette opération 65432.21 moins 65422.32

le résultat vous semble juste ?

si vous êtes sur Excel par exemple, formattez le résultat à 12 décimales

(non pas douze des six mâles madame !)

et qu'observez vous ????? :casstet: :casstet:

remarque en VBA idem, en AutoLisp dito, en VB identique!

étonnant non ?

c'est avec plaisir que je lirais les commentaires

(non pas comment taire pépé !)

amicalement

 

Posté(e)

Pas de commentaire ;)

Juste une constatation:

en lisp

(rtos (- (float 8191.89) (float 8182)) 2 12)

 

puis

 

(rtos (- (float 8191.90) (float 8182.01)) 2 12)

 

8182 est une limite en nombre réel ?!?! :casstet:

 

La question est posée

 

Bonuscad

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Au risque de paraître un peu niais j'avoue que je n'ai pas très bien compris le profond de vos pensées respectives !!!

Je croyais mais bon, je me trompe certainement, que le maximum de précision adimissible pour Autocad était de 10 décimales.

Dans ce cas si on le fait souffrir à 12 décimales il est peut-être un peu logique d'avoir des surprises quant-à la validité de certaines approximations . Il ne faut pas oublier que les opérations mathématiques en informatique ne sont que des itérations de calculs élémentaires (+,-,*,/) développées de façon limitée (dans le cadre de l'environnement microsoft peut-être justement à 10 décimales dans un 1er temps)

 

Inversement si je prend la même formule que précédemment avec 10 et non 12

 

(rtos (- (float 8191.89) (float 8182)) 2 10)

(rtos (- (float 8191.90) (float 8182.01)) 2 10)

 

J'obtiend par contre le même résultat.

Je repette je n'ai peut-être pas compris le problème, mais je crois qu'il n'y en a pas tout simplement !!

 

Dire que l'année dernière en Judo je pesais officiellement 89 kg et que j'aurais pu expliquer à l'arbitre que ce n'était qu'une vision de l'esprit et qu'à partir de cela j'aurais pu peser 88 Kg , j'en reste baba !!. ;)

 

 

Formateur

ATC Autocad - Mechanical - Inventor - Electrical

Posté(e)

Hello

en l'occurence, c'est moi qui était niais de penser qu'un processeur ne faisait pas d'erreurs de calcul sur des opérations élémentaires.

bien sûr, il est toujours possible de forcer le nombre de décimales significatives, er je suis entièrement de l'avis de ceux qui disent que cette précision est superflue, mais en programmant, lorsque tu fais une comparaison de résultat pour arrêter une boucle, tu vois la machine tourner jusqu'à la Saint BillGate, et c'est pas demain.

en attendant méfions nous... et vérifions

amicalement :P

Posté(e)

Il est dit qu'Autolisp utilise en interne des valeur 32 bits (et que les valeur transferées à AutoCAD sont limitées à 16)

Pour t'en assurrer essaye

 

(rtos (- pi 3) 2 16)

 

Donc à 12 décimale je pense qu'il ne doit pas "souffrir" bien qu'il est en limites.

(12 + 4 chiffre significatif), l'écart ne devrait concerné que l'arrondi du dernier chiffre.

 

Toujours est il que je comprend pas pourquoi l'écart est si grand avec des valeurs qui ne sont pas le résultat d'un calcul précédent

 

Si l'écart est si important, je veux bien récupérer les résisudus des opérations informatique des transactions boursières. Pour moi ça me suffirait ;)

si tout les 8000€ j'en récupére le 1E-12 je prends!

 

NB tiré des conversion d'unité d'Autodesk

*meter(s),metre(s),m

-1,0,1,0,-1,4.1214856408e11,0

In this example, the constants that make one meter are as follows:

 

Utiliser 11 chiffre après la virgule ne leur a pas apparu incongru.

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Je disais bien que je n'étais pas sûr de la précision théorique d'Autocad.

En l'occurence je me suis simplement contenté d'aller dans le contrôle des unités de Format .

Celui-ci avait l'air de limiter la précision à 10 décimales et je me suis contenté de ce résultat.

Effectivement il doit être possible ensuite de pousser cette limite à des valeurs supérieures en fonction des différents modules liés à Autocad (lisp, C, etc ..) mais elles ne sont peut-être pas aussi bien supportées que cela.

Ceci expliquerait cela ...

Néanmoins pour Didier, je crois savoir qu'il a souvent eu l'occasion de faire de personnalisations orientées topo. Les fonctions trigo sont un joyeux exemple en matière de précisions et de comparaison !!!

C'est vrai qu'il faut faire gaffe aux seuils de comparaison et ceux_ci doivent souvent être .... assez généreux ... dirons nous.

Quant-à toi Bonuscad tu as peut-être compris le processus de ce que l'on appelle les fuites financières en SUISSE ou dans les iles KAÏMAN parfaites ...

Les fuites logicielles ca existe et faut faire avec ... ;)

Formateur

ATC Autocad - Mechanical - Inventor - Electrical

Posté(e)

Si l'écart est si important, je veux bien récupérer les résisudus des opérations informatique des transactions boursières. Pour moi ça me suffirait

 

C'est précisément cela qu'avait fait un employé de banque il y a quelques années, il faisait virer des fractions de centimes sur son compte. Il s'était fait coincé et depuis que la combine est connue, le fait ne s'est à ma connaissance pas reproduit.

 

 

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité