Literale

Literale sind konstante Werte, die als Grundlage für alle Werte dienen, die zur Verarbeitung an FormCalc übergeben werden. Es gibt zwei allgemeine Typen von Literalen: Zahlen und Zeichenfolgen.

Zahlenliterale

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.

Zeichenfolgenliterale

Ein Zeichenfolgenliteral ist eine in Anführungszeichen eingeschlossene Folge von beliebigen Unicode-Zeichen. Beispiel:

    "The cat jumped over the fence." 
    "Number 15, Main street, California, U.S.A"

Das Zeichenkettenliteral "" steht für eine leere Abfolge von Textzeichen, die als „leere Zeichenfolge“ bezeichnet wird.

Zum Einbetten eines Anführungszeichens (") innerhalb eines Zeichenfolgenliterals müssen Sie zwei Anführungszeichen einfügen. Beispiel:

    "The message reads: ""Warning: Insufficient Memory"""

Zu jedem Unicode-Zeichen gibt es eine äquivalente, 6 Zeichen lange Escape-Sequenz, die aus \u und vier nachfolgenden Hexadezimalziffern besteht. In einem Zeichenfolgenliteral lässt sich jedes Zeichen, einschließlich der Steuerzeichen, mit einer entsprechenden Unicode-Escape-Sequenz darstellen. Beispiel:

    "\u0047\u006f\u0066\u0069\u0073\u0068\u0021" 
    "\u000d" (carriage return) 
    "\u000a" (newline character)