La virgule flottante avec ESP32forth
publication: 24 septembre 2021 / mis à jour 24 février 2023
Appel à collaboration
Vous développez des montages, simples ou complexes avec ESP32 et ESP32forth.
Partagez-les ici sur ce site.
ESP32forth ne pourra se développer qu'avec la collaboration active de toutes les bonnes volontés.
Vos montages peuvent aider d'autres développeurs.
Les montages des autres développeurs peuvent vous aider.
Pour proposer un article ou un montage, cliquez ici
Pour récupérer cette version de ESP32forth:
- version 7.065 ZIP file (23.2 K) with FP package
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, ESP32forth 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 ESP32forth
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 ESP32forth
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 ESP32forth:
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
ESP32Forth 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
ESP32forth 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