Letterali

I letterali sono valori costanti che formano la base di tutti i valori passati a FormCalc per l'elaborazione. I due tipi principali di letterali sono numeri e stringhe.

Valori letterali numerici

Un letterale numerico è una sequenza composta per la maggior parte di cifre costituite da uno o più dei seguenti caratteri: un numero intero, un punto decimale, un segmento frazionario, un indicatore esponenziale ("e" oppure "E") e un valore esponenziale eventualmente con segno. I seguenti sono tutti esempi di letterali numerici:

  • -12

  • 1.5362

  • 0.875

  • 5,56e-2

  • 1,234E10

È possibile omettere il numero intero o il segmento frazionario di un letterale numerico, ma non entrambi. Inoltre, all'interno del segmento frazionario, è possibile omettere il punto decimale o il valore esponenziale, ma non entrambi.

Tutti i letterali numerici sono convertiti internamente nei valori binari a 64 bit dell'Institute of Electrical and Electronics Engineers (IEEE). Tuttavia, i valori IEEE possono solo rappresentare una quantità finita di numeri, quindi alcuni valori non sono rappresentati come frazione binaria. Analogamente, alcuni valori come 1/3, non hanno una rappresentazione precisa come frazione decimale (il valore decimale avrà bisogno di un numero infinito di posti decimali per essere completamente accurato).

I valori che non hanno una frazione binaria equivalente sono generalmente letterali numerici con più di 16 cifre significanti prima dell'esponente. FormCalc arrotonda questi valori al più vicino valore rappresentabile IEEE a 64 bit in conformità con gli standard IEEE. Ad esempio, il valore:

    123456789.012345678

viene arrotondato al valore (più vicino):

    123456789.01234567

Tuttavia, in un secondo esempio, il letterale numerico:

    99999999999999999 

viene arrotondato al valore (più vicino):

    100000000000000000

A volte questo funzionamento può restituire risultati imprevisti. FormCalc fornisce una funzione, Round, che restituisce un numero arrotondato a un numero definito di posizioni decimali. Quando è esattamente a metà tra due numeri rappresentabili, il numero dato è arrotondato in direzione opposta allo zero, ovvero è arrotondato per eccesso se positivo e per difetto se negativo. Per cui, nell'esempio seguente:

    Round(0.124, 2)

restituisce 0,12,

e

    Round(.125, 2)

restituisce 0,13.

In base a tale convenzione, ci si aspetterebbe che:

    Round(0.045, 2)

restituisca 0,05.

Tuttavia, lo standard IEEE 754 stabilisce che il letterale numerico 0,045 venga approssimato a 0,0449999999999999. Questa approssimazione è più vicina a 0,04 che a 0,05. Quindi,

    Round(0.045, 2)

restituisce 0.04.

Questo funzionamento è conforme allo standard IEEE 754.

I valori IEEE a 64 bit supportano rappresentazioni come NaN (non un numero), +Inf (infinito positivo), e -Inf (infinito negativo). FormCalc non supporta queste rappresentazioni, ed espressioni che corrispondono a qualsiasi risultato NaN, +Inf, o -Inf determinano un'eccezione di errore, che viene passata al resto dell'espressione.

Stringhe letterali

Una stringa letterale è una sequenza di caratteri Unicode tra virgolette. Ad esempio:

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

La stringa letterale "" definisce una sequenza vuota di caratteri di testo denominata stringa vuota.

Per includere le virgolette all'interno di una stringa letterale, è necessario includerle tra virgolette. Ad esempio:

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

Tutti i caratteri Unicode presentano una sequenza di escape equivalente di 6 caratteri costituita da \u seguita da quattro cifre esadecimali. All'interno di qualsiasi stringa letterale è possibile rappresentare qualsiasi carattere, inclusi caratteri di controllo, utilizzando la sequenza di escape Unicode equivalente. Ad esempio:

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