Warum gibt Round [2.75.0.1] 2.800000000003 zurück?

7

Mathematica 8.0.1

Jeder könnte erklären, was die Logik hinter diesem Ergebnis wäre

%Vor%

Ich habe erwartet, dass das zweite Ergebnis oben 2,8 ist?

EDIT 1:

Ich habe versucht, das oben genannte für Formatierungszwecke zu tun, nur um die Zahl in den Raum zu passen. Am Ende habe ich folgendes getan, um das gewünschte Ergebnis zu erzielen:

%Vor%

Ich wünsche Mathematica hat printf () wie Formatierungsfunktion. Ich finde Formatierungsnummern in Mathematica für genaue Feldbreite und bilden ein wenig peinlich im Vergleich zu printf () Formatierungsregeln.

EDIT 2: Ich habe versucht, $ MaxExtraPrecision = 1000 auf eine Nummer, die ich für Format / Runde versuchte, aber es hat nicht funktioniert, deshalb habe ich diese Frage gestellt. Hier ist es

%Vor%

EDIT 3:

Ich habe diesen Weg gefunden, um eine Zahl nur auf einen Dezimalpunkt zu formatieren. Verwenden Sie Zahlenform, aber zuerst müssen Sie herausfinden, welche n-stellige Genauigkeit verwendet werden soll, indem Sie die Anzahl der Stellen links vom Dezimalpunkt zählen und dann 1 hinzufügen.

%Vor%

EDIT 4:

Das obige (Edit 3) funktionierte nicht für Zahlen wie

%Vor%

Nach einigen Versuchen fand ich Accounting Form, um zu tun, was ich will. AccountingForm entfernt das 10 ^ n Formular, das NumberForm nicht hatte:

%Vor%

Für die Formatierung numerischer Werte war die beste Sprache, die ich fand, Fortran, gefolgt von COBOL und auch von den Sprachen, die printf () Standardformatierung verwenden oder unterstützen. Mit Mathematica kann man solche Formatierungen sicher machen, aber es scheint mir zu kompliziert. Ich habe nie verstanden, warum Mathematik Printf [] nicht hat     

Nasser 13.06.2011, 13:11
quelle

3 Antworten

3

Number/AccountingForm kann eine Liste im zweiten Argument aufnehmen, deren zweites Element die Anzahl der Nachkommastellen ist:

%Vor%

Vielleicht ist das nützlich.

    
Brett Champion 13.06.2011, 19:08
quelle
11

Nicht alle dezimalen (Basis 10) Zahlen mit einer endlichen Anzahl von Ziffern sind binär (Basis 2) mit einer endlichen Anzahl von Ziffern darstellbar. Z.B. 0.1 ist nicht binär darstellbar, genau wie 1/3 ~ = 0.33333 ... ist nicht dezimal darstellbar. Mathematica (und andere Software) verwendet nur eine begrenzte Anzahl von Dezimalziffern, wenn die Zahl angezeigt wird, um diesen Effekt auszublenden. Gelegentlich kann es jedoch vorkommen, dass genügend Dezimalziffern angezeigt werden, dass der Unterschied sichtbar wird.

Ссылка

BEARBEITEN

Dieser Befehl zeigt Ihnen, was passiert, wenn Sie die abschließende binäre Darstellung von 0.1 mit 20 Binärziffern finden und diese dann in Dezimalzahlen umrechnen:

%Vor%     
Szabolcs 13.06.2011 13:25
quelle
7

Die Nummer wird in der Basis 2 statt in der Basis 10 (dezimal) gespeichert. Es ist unmöglich, 2.8 in Basis 2 darzustellen, daher wird der nächstliegende Wert verwendet: 2.8000000000000003

    
bradley.ayers 13.06.2011 13:14
quelle

Tags und Links