Floating-Nummernfehler mit einer einfachen SubtraktionIch kann nicht sagen, ob JMP zwei einfache Zahlen richtig subtrahieren kann, aber ich habe die folgenden Zahlen ausprobiert:
16.11-15.12
0,99 (ok, so weit so gut)
15.29-15.18
0.109999999999999 (nicht mehr so gut)
15.29-15.19
0.0999999999999997 (eine sieben?)
Wo ist der Haken, den ich falsch platziert habe?
Dies geschieht mit JMP 12.2.0 (64-Bit) im Skripteditor.
Re: Floating Number Error mit einer einfachen SubstraktionIch endete mit
format(mean(y),6)
Im Bericht wird also eine sehr kleine Zahl in 1.574e-6 konvertiert und benötigt nicht viel Platz.
aber
Format( 1.2345, "Precision", 3)
wäre der Weg für "signifikante Ziffern".
Re: Floating Number Error mit einer einfachen SubstraktionIn Bezug auf "signifikante Ziffern" können Sie dies durch Verwendung des Formats "Precision" mit der Funktion "Format" erhalten. Die Funktion "Char" unterstützt außerdem zwei zusätzliche Argumente, eines für die Breite und eines für die Anzahl der Dezimalstellen, wenn Sie die Rundenoperation zur Anzeige überspringen möchten.
Char( 15.29 - 15.19, 10, 2); // "0.10"
Format( 12.345, "Precision", 3); // "12.3"
Format( 1.2345, "Precision", 3); // "1.23"
Beim ursprünglichen Problem geht es darum, dass Computer Zahlen in Basis 2 (binär) speichern, sie jedoch in Basis 10 anzeigen, und einige Basis-10-Ziffern wie "0,1" haben in Basis 2 keine genaue Darstellung.
Re: Floating Number Error mit einer einfachen SubstraktionIch bin nicht sicher, was Sie fragen. Wenn Sie fragen, ob diese Funktionen die Möglichkeit haben, signifikante Ziffern sowie die Anzahl der Dezimalstellen anzugeben, lautet die Antwort Nein. Wenn Sie fragen, ob ich eine solche Option hinzufügen möchte, ist diese Anfrage eine Angelegenheit der JMP-Entwicklung.
Re: Floating Number Error mit einer einfachen SubstraktionTHX für die Eingaben, kleine Frage, betrachten Sie eine Option als "n signifikante Ziffern" für Show, Char und Round? das würde sehr helfen.
Re: Floating Number Error mit einer einfachen SubstraktionUm das Problem zu veranschaulichen, handelt es sich NICHT um ein JMP-Problem. In Excel wird Folgendes beschrieben.
| X |
Y |
X - Y Formel |
| 16.11 |
15.12 |
0.99000000000000000 |
| 15.29 |
15.18 |
0.10999999999999900 |
| 15.29 |
15.19 |
0,09999999999999960 |
Re: Floating Number Error mit einer einfachen SubstraktionIch verstehe. In meinem Beispiel mit der Funktion Round () sollte nur eine Methode veranschaulicht werden, um mit der begrenzten Genauigkeit der Fließkommazahl und der dazugehörigen Arithmetik umzugehen. Sie können umfangreichere Lösungen für komplexere Fälle erstellen.
Hast du benutzt Hilfe > Bücher > Skript-Anleitung oder Hilfe > Skriptindex die Fähigkeiten der Funktionen Round () oder Char () sehen?
Re: Floating Number Error mit einer einfachen SubstraktionVielleicht möchten Sie diese Ressource lesen: JMP Numerische Genauigkeit Sie können solche Whitepapers für andere gängige Software wie Tabellenkalkulationen finden. Es ist ein bekanntes Problem, aber im Allgemeinen kein Problem.
Re: Floating Number Error mit einer einfachen Substraktionnicht leise, um es etwas zu "ausdehnen" (und der Grund, warum es mich nervt) ist, dass der Grad der Präzision von der Benutzereingabe abhängt
Wenn er 15,29 mm und 15,19 mm verwendet, erhält er mit Round (x, 2) die richtigen 0,1 mm.
Wenn er 0.01529m und 0.01519m verwendet, erhält er 0m und wird wahrscheinlich den Seccand in meiner Tür stehen, nachdem er das Ergebnis gesehen hat * g *
Und ich kann nicht sehen, ob "signifikante Ziffern" wie round oder char unterstützt werden.
Re: Floating Number Error mit einer einfachen SubstraktionIm Mathematik Eine einfache Arithmetik würde bei diesen Unterschieden genaue Ergebnisse liefern: 15,29 - 15,18 = 0,11 und 15,29 - 15. 19 = 0,10. Aber das Ergebnis in JMP ist endliche Präzisionsarithmetik in einem Computer. Das Ergebnis hängt davon ab, wie die reelle Zahl als Fließkommazahl dargestellt wird und wie die arithmetischen Operatoren mit dieser Darstellung arbeiten. Es ist nicht schwierig, Fälle zu finden, in denen das Ergebnis des Operators und das mathematische Ergebnis nicht übereinstimmen.
JMP verwendet für diese Vorgänge möglicherweise eine standardmäßige numerische Gleitkommabibliothek oder einen dedizierten Hardware-Gleitkommaprozessor.
Es gibt einige Software, die eine erweiterte oder "unbegrenzte" Genauigkeit verwendet (nur durch physische Ressourcen begrenzt), aber die praktischen Ergebnisse in unseren statistischen Methoden, wie z.
Eine Lösung in Ihrem Fall ist, das Ergebnis in einer Formel oder einem Skript zu runden:
Round( 15.2900000 - 15.1900000, 2 )
Dann erhalten Sie 0,1 für das Ergebnis. Problem gelöst.