Autres articles / Other articles

La virgule flottante avec ESP32forth

publication: 24 septembre 2021 / mis à jour 24 février 2023

Read this page in english

 


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:

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:

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:

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:

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