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.