Ein Zahlenliteral ist eine hauptsächlich aus Ziffern bestehende Folge, die sich aus einem oder mehreren der folgenden Zeichen zusammensetzt: Ganzzahl, Dezimalpunkt, Bruchanteil, Exponentenzeichen („e“ oder „E“) sowie ein optionaler vorzeichenbehafteter Exponentenwert. Die folgenden Beispiele zeigen einige Literalzahlen:
-
-12
-
1.5362
-
0.875
-
5.56e-2
-
1.234E10
Entweder der Ganzzahl- oder der Bruchanteil einer Literalzahl kann weggelassen werden, aber nicht beide gleichzeitig. Außerdem kann im Bruchanteil entweder der Dezimalpunkt oder der Exponentenwert weggelassen werden, aber nicht beide gleichzeitig.
Alle Zahlenliterale werden intern gemäß einem Standard des Institute of Electrical and Electronics Engineers (IEEE) in 64 Bit lange Binärwerte umgewandelt. Da die IEEE-Werte aber nur eine endliche Zahlenmenge darstellen können, lassen sich bestimmte Werte in dieser Form nicht als binärer Bruch darstellen, ähnlich wie sich bestimmte Werte (z. B. 1/3) als Dezimalbruch nicht exakt darstellen lassen (ein völlig genauer Dezimalwert müsste unendlich viele Dezimalstellen haben).
Die Werte ohne äquivalente binäre Bruchdarstellung sind in der Regel Zahlenliterale mit mehr als 16 signifikanten Ziffern vor dem Exponenten. FormCalc rundet diese Werte auf den nächsten nach dem IEEE-Standard darstellbaren 64-Bit-Wert. Beispielsweise wird der Wert
123456789.012345678
auf den (nächsten) Wert gerundet:
123456789.01234567
In einem zweiten Beispiel wird dagegen das Zahlenliteral
99999999999999999
auf den (nächsten) Wert gerundet:
100000000000000000
Dieses Verhalten kann in manchen Fällen zu unerwarteten Ergebnissen führen. FormCalc enthält die Funktion
Round
, welche die übergebene Zahl auf eine angegebene Zahl von Dezimalstellen gerundet zurückgibt. Wenn die übergebene Zahl genau in der Mitte zwischen zwei darstellbaren Zahlen liegt, wird „von 0 weg“ gerundet; das heißt, eine positive Zahl wird nach oben gerundet, eine negative nach unten. Dazu zwei Beispiele:
Round(0.124, 2)
liefert
0.12
and
Round(.125, 2)
liefert
0.13
Folglich würde man erwarten, dass
Round(0.045, 2)
0.05
liefert.
Die IEEE-Norm 754 schreibt aber vor, dass das Zahlenliteral
0.045
als
0.0449999999999999
anzunähern ist. Dieser Näherungswert liegt näher bei
0.04
als bei
0.05
. Daher liefert
Round(0.045, 2)
0.04
.
Dies entspricht ebenfalls der IEEE-Norm 754.
64-Bit-Werte gemäß der IEEE-Norm unterstützen auch Darstellungen wie NaN (Not a Number – keine Zahl), +Inf (positiv unendlich) und -Inf (negativ unendlich). In FormCalc werden diese Werte jedoch nicht unterstützt, und Ausdrücke, die zu NaN, +Inf oder -Inf ausgewertet werden, führen zu einem Ausnahmefehler, der dann auch auf den Rest des Ausdrucks übertragen wird.