erreur de nombre flottant avec une soustraction simpleJe ne peux pas dire si JMP peut soustraire correctement deux nombres simples, mais j'ai essayé les nombres suivants:
16.11-15.12
0,99 (ok, jusqu'ici tout va bien)
15.29-15.18
0.109999999999999 (pas si bon maintenant)
15.29-15.19
0.0999999999999997 (un sept?)
Alors, où est le crochet que j'ai mal placé?
Cela se produit avec JMP 12.2.0 (64 bits) dans l'éditeur de script.
Re: erreur de nombre flottant avec une soustraction simpleJe finis par utiliser
format(mean(y),6)
dans le rapport, un très petit nombre est converti en 1.574e-6 et n’utilise pas beaucoup d’espace.
mais
Format( 1.2345, "Precision", 3)
serait le chemin pour "chiffres significatifs".
Re: erreur de nombre flottant avec une soustraction simpleEn ce qui concerne les "chiffres significatifs", vous pouvez obtenir cela en utilisant le format "Précision" avec la fonction "Format". En outre, la fonction "Char" prend en charge deux arguments d'addition, un pour la largeur et l'autre pour le nombre de décimales, si vous souhaitez simplement ignorer l'opération Round pour l'affichage.
Char( 15.29 - 15.19, 10, 2); // "0.10"
Format( 12.345, "Precision", 3); // "12.3"
Format( 1.2345, "Precision", 3); // "1.23"
En ce qui concerne le problème initial, cela revient au fait que les ordinateurs stockent les numéros en base 2 (binaire) mais les affichent en base 10, et certains chiffres en base 10 comme "0.1" n’ont pas de représentation exacte en base 2.
Re: erreur de nombre flottant avec une soustraction simpleJe ne suis pas sûr de ce que vous demandez. Si vous demandez si ces fonctions ont la possibilité de spécifier des chiffres significatifs ainsi que le nombre de décimales, la réponse est non. Si vous me demandez si j'envisagerais d'ajouter une telle option, cette demande est l'affaire de JMP Development.
Re: erreur de nombre flottant avec une soustraction simpleTHX pour les entrées, petite question, considérez-vous une option comme "n chiffres significatifs" pour show, char et round? Cela aiderait beaucoup.
Re: erreur de nombre flottant avec une soustraction simpleJuste pour illustrer le problème, ce n’est PAS un problème JMP, voici ce qui se passe dans Excel.
| X |
Y |
Formule X - Y |
| 16.11 |
15.12 |
0.99000000000000000 |
| 15.29 |
15.18 |
0.10999999999999900 |
| 15.29 |
15.19 |
0.09999999999999960 |
Re: erreur de nombre flottant avec une soustraction simpleJe comprends. Mon exemple avec la fonction Round () était uniquement destiné à illustrer une méthode permettant de traiter la précision limitée du nombre à virgule flottante et de l'arithmétique associée. Vous pouvez créer des solutions plus riches pour traiter des cas plus complexes.
As-tu utilisé Aidez-moi > Livres > Guide de script ou Aidez-moi > Index de script voir les capacités des fonctions Round () ou Char ()?
Re: erreur de nombre flottant avec une soustraction simpleVous voudrez peut-être lire cette ressource: Précision numérique JMP Vous pouvez trouver de tels livres blancs pour d’autres logiciels populaires tels que les tableurs. C'est un problème connu mais généralement pas un problème.
Re: erreur de nombre flottant avec une soustraction simplepas silencieux, "exten" un peu (et la raison pour laquelle cela me dérange) est que le degré de précision dépend de l'entrée de l'utilisateur
S'il utilise 15.29mm et 15.19mm, il obtiendra le 0.1mm correct avec Round (x, 2).
S'il utilise 0,01529m et 0,01519m, il obtiendra 0m et restera probablement devant ma porte après avoir vu le résultat * g *
Et je ne peux pas voir si les "chiffres significatifs" sont pris en charge comme round ou char.
Re: erreur de nombre flottant avec une soustraction simpleDans mathématiques , une simple arithmétique donnerait des résultats exacts pour ces différences: 15,29 - 15,18 = 0,11 et 15,29 - 15. 19 = 0,10. Mais le résultat dans JMP est arithmétique de précision finie dans un ordinateur. Le résultat dépend de la manière dont le nombre réel est représenté sous forme de nombre à virgule flottante et du fonctionnement des opérateurs arithmétiques. Il n'est pas difficile de trouver des cas où le résultat de l'opérateur et le résultat mathématique ne concordent pas.
JMP peut utiliser une bibliothèque logicielle numérique numérique à virgule flottante standard ou un processeur matériel dédié à cette opération.
Certains logiciels utilisent une précision étendue ou «illimitée» (limitée uniquement par des ressources physiques), mais cela ne change généralement pas les résultats pratiques de nos méthodes statistiques, telles que la régression.
Une solution dans votre cas consiste à arrondir le résultat dans une formule ou un script:
Round( 15.2900000 - 15.1900000, 2 )
Ensuite, vous obtenez 0,1 pour le résultat. Problème résolu.