Seltsamkeit der Gleitkomma-MathematikIch benutze JMP15.
Ich habe kürzlich festgestellt, dass ein Skript, das ich seit einiger Zeit verwende, einen kleinen Fehler enthält, der auf eine Gleitkomma-Eigenart zurückzuführen ist, die unten dargestellt ist.
Die ersten beiden Zeilen berechnen die gleiche Zahl -> 23.
Wenn ich die Deckenfunktion verwende, gibt die erste Version 24 und die zweite 23 zurück.
Sollte das passieren?
show (((1104/2016) * 42));
show (((42 * 1104/2016)));
zeigen (Decke ((1104/2016) * 42));
zeigen (Decke ((42 * 1104/2016)));
/ *:
(1104/2016) * 42 = 23;
42 * 1104/2016 = 23;
Decke ((1104/2016) * 42) = 24;
Decke (42 * 1104/2016) = 23;
SkriptingBetreff: Fremdheit der Gleitkomma-MathematikSie haben bereits gesehen, dass dies eine Gleitkomma-Eigenart ist. Sollte dies passieren, technisch nein, aber aufgrund von Gleitkommaberechnungen wird es immer seltsame "Rundungsprobleme" geben.
Wenn Sie die erste Berechnung in eine Spalte (1104/2016) * 42 einfügen, ändern Sie die Breite der Spalte in 30 (beliebig groß) und formatieren Sie sie in Feste Dezimalzahl mit 20 Dezimalstellen. Sie sehen, dass die Zahl wie folgt gespeichert ist: 23.000000000000003535271 .
Betreff: Fremdheit der Gleitkomma-Mathematik2016: 2 × 2 × 2 × 2 × 2 × 3 × 3 × 7
1104: 2 × 2 × 2 × 2 × 3 × 23
42: 2 × 3 × 7
1104/2016 ist ( 2 × 2 × 2 × 2 × 3 × 23) / ( 2 × 2 × 2 × 2 × 2 × 3 × 3 × 7)
23 / (2 × 3 × 7) ist eine sich wiederholende Fraktion in Basis 10 UND Basis 2 (hex, Basis 16, gezeigt mit 4 Bits pro hexadezimaler Ziffer):
0,5476190476190476190476190 ... oder 3FE186186186186 ... (Glückliche 12-Bit-Wiederholung zur Visualisierung!)
Beide sind abgeschnitten und ungenau. Der tatsächliche Wert für die Darstellung der Hex-Basis 2 wird auf 3FE1861861861862 gerundet, was leicht hoch ist (3FE ist der Exponent). Das Multiplizieren mit 42 nach der Division ist ebenfalls leicht hoch.
(42 × 1104) / 2016 ist (( 2 × 3 × 7 ) × ( 2 × 2 × 2 × 2 × 3 × 23)) / ( 2 × 2 × 2 × 2 × 2 × 3 × 3 × 7 )
Multiplizieren Sie mit 42 vor der Teilung, um eine schöne Reduzierung der Hauptteiler zu erhalten.
Betreff: Fremdheit der Gleitkomma-MathematikIch denke, ich werde diese Antwort formulieren