Littéraux

Les littéraux sont des valeurs constantes qui forment la base de toutes les valeurs transmises à FormCalc pour traitement. Il existe deux grands types de littéraux : les nombres et les chaînes.

Littéraux numériques

Un littéral numérique est une séquence composée principalement de chiffres constitués d’un ou plusieurs des caractères suivants : nombre entier, point décimal, fraction, indicateur d’exposant (« e » ou « E ») et valeur d’exposant avec signe facultatif. Voici quelques exemples de littéraux numériques :

  • -12

  • 1.5362

  • 0.875

  • 5.56e-2

  • 1.234E10

Dans un littéral numérique, il est possible d’omettre la partie de l’entier ou de la fraction, mais non les deux. En outre, dans la partie de la fraction, on peut aussi omettre le point décimal ou la valeur de l’exposant, mais non les deux.

Tous les littéraux numériques sont convertis en interne en valeurs binaires 64 bits IEEE. Cependant, puisque les valeurs IEEE ne peuvent représenter qu’une quantité finie de nombres, certaines valeurs n’ont pas de représentation en fraction binaire. Cette situation est comparable au fait que certaines valeurs, comme 1/3, n’ont pas de représentation précise en fraction décimale (la valeur décimale aurait besoin d’un nombre infini de décimales pour être tout à fait exacte).

Ces valeurs qui ne possèdent pas d’équivalent en fraction binaire sont généralement les littéraux numériques comptant plus de 16 chiffres significatifs avant l’exposant. FormCalc arrondit ces valeurs à la valeur 64 bits IEEE représentable la plus proche selon les normes de l’IEEE. Par exemple, la valeur :

    123456789.012345678

est arrondi à la valeur (la plus proche) :

    123456789.01234567

Autre exemple, le littéral numérique :

    99999999999999999 

est arrondi à la valeur (la plus proche) :

    100000000000000000

Cette façon de faire entraîne parfois des résultats surprenants. FormCalc possède une fonction, Round, qui renvoie le nombre indiqué arrondi au nombre indiqué de décimales. Lorsque le nombre indiqué est exactement à mi-chemin entre deux nombres représentables, il est arrondi au plus loin de zéro. Autrement dit, le nombre est arrondi à la hausse s’il est positif et à la baisse s’il est négatif. Considérez l’exemple suivant :

    Round(0.124, 2)

renvoie 0,12,

and

    Round(.125, 2)

renvoie 0,13.

D’après cette convention, vous pourriez penser que :

    Round(0.045, 2)

renvoie 0,05.

Cependant, la norme IEEE 754 stipule que le littéral numérique0,045 reçoit la valeur approximative de 0,0449999999999999. Cette approximation est plus près de 0,04que de 0,05 C’est pourquoi :

    Round(0.045, 2)

renvoie 0,04.

Cette façon de faire est conforme à la norme IEEE 754.

Les valeurs 64 bits IEEE reconnaissent les représentations comme NaN (« not a number », n’est pas un nombre), +Inf (infini positif) et -Inf (infini négatif). FormCalc ne les gère pas ; toute expression dont l’évaluation a pour résultat NaN, +Inf ou -Inf entraîne une exception d’erreur, transmise au reste de l’expression.

Littéraux chaînes

Un littéral chaîne est une séquence constituée de tout caractère Unicode, précédée et suivie de guillemets. Par exemple :

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

Le littéral chaîne "" définit une séquence vide (sans caractères) appelée chaîne vide.

Pour incorporer un guillemet anglais double (") dans un littéral chaîne, vous devez insérer deux guillemets anglais double. Par exemple :

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

Tous les caractères Unicode ont une séquence d’échappement de 6 caractères équivalente, composée de \u suivie de quatre chiffres hexadécimaux. Dans tout littéral chaîne, il est possible d’exprimer n’importe quel caractère, y compris les caractères de commande, au moyen de la séquence d’échappement Unicode équivalente. Par exemple :

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