La virgule flottante avec eFORTH
publication: 3 mars 2023 / mis à jour 3 mars 2023
Les nombres réels
Si on teste cette opération 1 3 /
en langage FORTH, le résultat sera 0.
Ce n'est pas surprenant. De base, le langage FORTH n'utilise que des nombres entiers simple ou double précision. Les nombres entiers offrent certains avantages:
- rapidité de traitement;
- résultat de calculs sans risque de dérive en cas d'itérations;
- conviennent à quasiment toutes les situations.
Même en calculs trigonométriques, on peut utiliser une table d'entiers. Il suffit de créer un tableau avec 90 valeurs, où chaque valeur correspond au sinus d'un angle, multiplié par 1000.
Mais les nombres entiers ont aussi des limites:
- résultats impossibles pour des calculs de division simple, comme notre exemple 1/3;
- nécessite des manipulations complexes pour appliquer des formules de physique.
Depuis la version 7.0.6.5, eFORTH intègre des opérateurs traitant des nombres réels.
Les nombres réels sont aussi dénommés nombres à virgule flottante.
Les réels avec eFORTH
Afin de distinguer les nombres réels, il faut les terminer avec la lettre "e":
3 \ push 3 on the normal stack 3e \ push 3 on the real stack 5.21e f. \ display 5.210000
C'est le mot f.
qui permet d'afficher un nombre réel situé au sommet
de la pile des réels.
Precision des nombres réels avec eFORTH
Le mot set-precision
permet d'indiquer le nombre de décimales à afficher
après le point décimal. Voyons ceci avec la constante pi
:
pi f. \ display 3.141592 4 set-precision pi f. \ display 3.1415
Six décimales est la précision limite de traitement des nombres réels avec eFORTH:
12 set-precision
1.987654321e f. \ display 1.987654668777
Si on réduit la précision d'affichage des nombres réels en dessous de 6, les calculs seront quand même réalisés avec une précision à 6 décimales.
Constantes et variables réelles
Une constante réelle est définie avec le mot fconstant
:
0.693147e fconstant ln2 \ natural logarithm of 2
Une variable réelle est définie avec le mot fvariable
:
fvariable intensity 170e 12e F/ intensity SF! \ I=P/U --- P=170w U=12V intensity SF@ f. \ display 14.166669
ATTENTION: tous les nombres réels transitent par la pile des nombres réels. Dans le cas d'une variable réelle, seule l'adresse pointant sur la valeur réelle transite par la pile de données.
Le mot SF!
enregistre une valeur réelle à l'adresse ou la variable
pointée par son adresse mémoire. L'exécution d'une variable réelle dépose l'adresse
mémoire sur la pile données classique.
Le mot SF@
empile la valeur réellle pointée par son adresse mémoire.
Les opérateurs réels
eFORTH dispose des quatres opérateurs arithmétiques F+ F- F* F/
:
1.23e 4.56e F+ f. \ display 5.790000 1.23-4.56 1.23e 4.56e F- f. \ display -3.330000 1.23-4.56 1.23e 4.56e F* f. \ display 5.608800 1.23*4.56 1.23e 4.56e F/ f. \ display 0.269736 1.23/4.56
eFORTH dispose aussi de ces mots:
1/F
calcule l'inverse d'un nombre réel;fsqrt
calcule la racine carrée d'un nombre réel.
5e 1/F f. \ display 0.200000 1/5 5e fsqrt f. \ display 2.236068 sqrt(5)
Legal: site web personnel sans commerce / personal site without seling