Autres articles / Other articles

La virgule flottante avec eFORTH

publication: 3 mars 2023 / mis à jour 3 mars 2023

Read this page in english

 


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, 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:

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