math
Description
Ce module contient les opérateurs arithmétiques, logiques et relationnels.
MSB ( -- u )
Constante retournant la valeur du bit le plus significatif d'un entier.
arguments:
aucun
retourne:
u Valeur de l'entier dont seul le bit le plus significatif est à 1.
MAX-INT ( -- n )
Constante retourant la valeur du plus grand entier signé.
arguments:
aucun
retourne:
n Valeur du plus grand entier signé.
MIN-INT ( -- n )
Constante retournant le plus petit entier signé.
arguments:
aucun
retourne:
n Plus petit entier signé.
HEX ( -- )
Initialise la variable système BASE avec la valeur 16. Après l'exécution
de ce mot, l'interpréteur condisère que les chaînes converties en nombre
sont en base 16 et les nombres à imprimés sont aussi convertis dans cette base.
arguments:
Aucun
retourne:
rien
DECIMAL ( -- )
Initialise la variable système BASE avec la valeur 10. Après l'exécution
de ce mot, l'interpréteur condisère que les chaînes converties en nombre
sont en base 10 et les nombres à imprimés sont aussi convertis dans cette base.
arguments:
Aucun
retourne:
rien
+ ( x1 x2 -- x3 ) x3=x1+x2
Additionne les 2 entiers au sommet de la pile des arguments.
arguments:
x1 premier entier.
x2 deuxième entier.
retourne:
x3 somme de x1 et x2
- ( x1 x2 -- x3 ) x3 = x1-x2
Soustrait l'entier x2 de l'entier x1.
arguments:
x1 premier entier.
x2 deuxième entier au sommet de la pile.
retourne:
x3 valeur obtenu en soustrayant x2 de x1.
1+ ( x1 -- x2 ) x2=x1+1
Incrémente de 1 la valeur au sommet de la pile.
arguments:
x1 Valeur au sommet de la pile des arguments.
retourne:
x2 x1 incrémenté de 1.
2+ ( x1 -- x2 ) x2=x1+2
Incrémente de 2 la valeur au sommet de la pile.
arguments:
x1 Valeur au sommet de la pile des arguments.
retourne:
x2 x1 incrémenté de 2.
1- ( x1 -- x2 ) x2=x1-1
Décrémente de 1 la valeur au sommet de la pile.
arguments:
x1 Valeur au sommet de la pile des arguments.
retourne:
x2 x1 décrémenté de 1.
2- ( x1 -- x2 ) x2=x1-2
Décrémente de 2 la valeur au sommet de la pile.
arguments:
x1 Valeur au sommet de la pile des arguments.
retourne:
x2 x1 décrémenté de 2.
2* ( x1 -- x2 ) x2 = 2*x1
Multiplie par 2 la valeur au sommet de la pile des arguments.
arguments:
x1
retourne:
x2 x1 multiplié par 2.
2/ ( x1 -- x2 ) x2=x1/2
Divise par 2 la valeur au sommet de la pile des arguments.
arguments:
x1
retourne:
x2 x2 divisé par 2.
LSHIFT ( x1 u -- x2 ) x2=x1<<u
Décale vers la gauche de u bits le nombre x1. Ce qui équivaut à
une multipliation par 2^u.
arguments:
x1 Nombre qui sera décalé vers la gauche.
u Nombre de bits de décalage.
retourne:
x2 x2=x1<<u
RSHIFT ( x1 u -- x2 ) x2 = x1>>u
Décalage vers la droite de u bits de la valeur x1.
Équivaut à une division par 2^u.
arguments:
x1 Nombre qui sera décalé.
u Nombre de bits de décalage.
retourne:
x2 x2=x1>>u
+! ( n a-addr -- ) *a-addr = *a-addr+n
Additionne un entier à la valeur d'une variable.
arguments:
n Entier à ajouter à la valeur de la variable.
a-addr Adresse de la variable.
retourne:
rien
D+ ( d1 d2 -- d3 ) d3=d1+d2
Addition de 2 entiers double.
arguments:
d1 Premier entier double.
d2 Deuxième enteier double.
retourne:
d3 Somme de d1 et d2
D- ( d1 d2 -- d3 ) d3 = d1-d2
Soustractions de 2 entiers doubles.
arguments:
d1 Premier entier double.
d2 Deuxième entier double.
retourne:
d3 Entier double résultant de la soustration d1-d2.
M+ ( d1 n -- d2 ) d2 = d1+n
Addition d'un entier simple à un entier double.
arguments:
d1 Entier double.
n Entier simple.
retourne:
d2 Entier double résultant de d1+n
* ( n1 n2 -- n3 ) n3=n1*n2
Multiplication signée de 2 entiers simple.
arguments:
n1 Premier entier.
n2 Deuxième entier.
retourne:
n3 Produit des 2 entiers.
M* ( n1 n2 -- d ) d=n1*n2
Produit de 2 entiers simples, conserve l'entier double.
arguments:
n1 Premier entier simple.
n2 Deuxième entier simple.
retourne:
d Entier double résultant du produit de n1*n2.
UM* ( u1 u2 -- ud ) ud=u1*u2
Muttiplication non signée de 2 entiers simple résultant en un entier double non signé.
arguments:
u1 premier entier simple non signé.
u2 deuxième entier simple non signé.
retourne:
ud Entier double non signé.
UD* ( ud1 u2 -- ud3 ) ud3=ud1*u2
Multiplication non signée d'un entier double par un entier simple.
arguments:
ud1 Entier double non signé.
u2 Entier simple non signé.
retourne:
ud3 Entier double non signé résultant du produit de ud1 u2.
UD*D ( ud1 ud2 -- ud3 ) \ ud3=ud1*ud2
Multiplication non signée de 2 entiers double avec entier double
comme résultat.
arguments:
ud1 Premier entier double non signé.
ud2 Deuxième entier double non signé.
retourne:
ud3 Produit de ud1 par ud2
/ ( n1 n2 -- n3 ) n3=n1/n2
Division entière signée sur nombres simple.
arguments:
n1 Numérateur
n2 Dénominateur
retourne:
n3 Quotient entier.
MOD ( n1 n2 -- n3 ) n3=n1%n2
Division entière de 2 entiers simple où seul le restant est conservé.
arguments:
n1 Numérateur
n2 Dénominateur
retourne:
n3 Reste de la division.
*/ ( n1 n2 n3 -- n4 ) n4=(n1*n2)/n3
Une multiplication de n1 par n2 est suivit d'une division du résultat par n3.
Le produit de n1 et n2 est conservé comme entier double avant la division.
arguments:
n1 Premier entier simple.
n2 Deuxième entier simple.
n3 Troisième entier simple.
retourne:
n4 Entier simple résultant de la division du double n1*n2 par n3.
*/MOD ( n1 n2 n3 -- n4 n5 )
Une multiplication de n1 par n2 est suivit d'une division par n3 le quotient
et le reste sont conservés. Le résultat intermédiaire de la multipllication
est un entier double.
arguments:
n1 Premier entier simple.
n2 Deuxième entier simple.
n3 Troisième entier simple.
retourne:
n4 Reste de la division de (n1*n2)/n3
n5 Quotient dela division de (n1*n2)/n3
/MOD ( n1 n2 -- n3 n4 )
Division signée de n1 par n2 , le reste et le quotient sont conservés.
arguments:
n1 Numérateur
n2 Dénominateur
retourne:
n3 Reste
n4 Quotient
UM/MOD ( ud u1 -- u2 u2 )
Division d'un entier double non signé
par un entier simple non signé
résulant en un quotient et reste simple.
arguments:
ud Entier double non signé, numérateur.
u1 Entier simple non signé, dénominateur.
retourne:
u2 Entier simple non signé, Reste
u3 Entier simple non signé, Quotient
UD/MOD ( ud1 u1 -- u2 ud2 )
Division d'un entier double non signé
par un entier simple non signé résultant
en un quotient double et un reste simple
arguments:
ud1 Entier double non signé, numérateur.
u1 Entier simple non signé, dénominateur.
résultat:
u2 Entier simple non signé, reste.
ud2 Entier double non signé, quotient.
MAX ( n1 n2 -- n ) n=max(n1,n2)
Retourne le plus grand des 2 entier signés.
arguments:
n1 Premier entier
n2 Deuxième entier
retourne:
n Le plus grand des 2 entiers signés.
MIN ( n1 n2 -- n ) n=min(n1,n2)
Retourne le plus petit des 2 entiers signés.
arguments:
n1 Premier entier
n2 Deuxième entier
retourne:
n Le plus petit des 2 entiers signés.
UMAX ( u1 u2 -- u ) u=max(u1,u2)
Retourne le plus grand des 2 entiers non signés.
arguments:
u1 Premier entier non signé.
u2 Deuxième entier non signé.
retourne:
u Le plus grand des 2 entiers non signés.
UMIN ( u1 u2 -- u ) u=min(u1,u2)
Retourne le plus petit des 2 entiers non signés.
arguments:
u1 Premier entier non signé.
u2 Deuxième entier non signé.
retourne:
u Le plus petit des 2 entiers non signés.
WITHIN ( n1|u1 n2|u2 n3|u3 -- f )
Compare n1|u1 avec la borne inférieur n2|u2 et supérieure n3|u3.
Retourne vrai si l'une des 2 conditions suivante est rencontrée.
Si n2|u2<n3|u3 et que n2|u2<=n1|u1<n3 ou
Si n2|u2>n3|u3 et que n2|u2<=n1|u1 ou n1|u1<n3|u3
Toute autre condition retourne faux.
Les 3 entiers doivent-être considérés de même type soit signés ou non signés.
arguments:
n1|u1 Entier à vérifier,signé ou non.
n2|u2 Borne inférieure fermée,signé ou non.
n3|u3 Borne supérieure ouverte, signé ou non.
retourne:
f Indicateur booléen vrai si condition n1|u1<=n2|u2<n3|u3.
EVEN ( n -- f )
Retourne un indicateur booléen vrai si l'entier est pair.
arguments:
n Entier à vérifier.
retourne:
f Indicateur booléen, vrai si entier pair.
ODD ( n -- f )
Retourne un indicateur booléen vrai si l'entier est impair.
arguments:
n Entier à vérifier.
retourne:
f Indicateur booléen, vrai si entier impair.
ABS ( n1 -- n2 )
Retourne la valeur absolue d'un entier simple.
arguments:
n1 Entier simple signé.
retourne:
n2 La valeur absolue de n1.
DABS ( d1 -- d2 )
Retourne la valeur absolue d'un entier double.
arguments:
d1 Entier double signé.
retourne:
d2 Valeur absolue de d1.
S>D ( n -- d )
Convertie entier simple en entier double.
arguments:
n Entier simple signé.
retourne:
d Entier double signé.
?NEGATE ( n1 n2 -- n3 )
Inverse n1 si n2 est négatif.
arguments:
n1 Entier simple signé.
n2 Entier simple signé, valeur de contrôle.
retourne:
n3 Entier simple, n2<0?-n1:n1
SM/REM ( d1 n1 -- n2 n3 )
Division symétrique entier double par simple arrondie vers zéro.
Adapté de Camel Forth pour MSP430.
arguments:
d1 Entier double signé, numérateur.
n1 Entier simple signé, dénominateur.
retourne:
n2 Reste de la division.
n3 Quotient de la division.
FM/MOD ( d1 n1 -- n2 n3 )
Division double/simple arrondie au plus petit.
Adapté de Camel Forth pour MSP430.
arguments:
d1 Entier double signé, numérateur.
n1 Entier simple signé, dénominateur.
retourne:
n2 Reste de la division.
n3 Quotient de la division.
EVAR+ ( a-addr -- )
Incrémente une variable résidante en mémoire EDS.
arguments:
a-addr Adresse de la variable.
retourne:
rien
EVAR- ( a-addr -- )
Décrémente une variable résidante en mémoire EDS.
arguments:
a-addr Adresse de la variable.
retourne:
rien
UDREL ( ud1 ud2 -- n )
Compare 2 nombres double non signés et retourne un indicateur de relation.
n = 1 si ud1>ud2
n = 0 si ud1==ud2
n = -1 si ud1<ud2
arguments:
ud1 Premier entier double non signé.
ud2 Deuxième entier double non signé.
retourne:
n Résultat de la comparaison.
NEGATE ( n1 -- n2 )
Inverse arithmétique de n1. Complément de 2.
arguments:
n1 Entier à inversé.
retourne:
n2 n2=-n1
DNEGATE ( d1 -- d2 )
Inverse arithmétique d'un entier double. Complément de 2.
arguments:
d1 Entier double à inversé.
retourne:
d2 d2=-d1
INVERT ( n1 -- n2 )
Inversion des bits, complément de 1.
arguments:
n1 Entier simple.
retourne:
n2 Inverse bit à bit de n1.
DINVERT ( d1 -- d2 ))
Invesion bit à bit d'un entier double. Complément de 1.
arguments:
d1 Entier double.
retourne:
d2 Inverse bit à bit de d1.
Description
opérations logiques bit à bit.
BITMASK ( u1 -- u2 )
Convertie la position d'un bit en masque.
Utile pour vérifier l'état du bit à la position u1 avec AND ou le mettre
à 1 avec OR.
arguments:
u1 Position du bit {0..15}
retourne:
u2 masque
AND ( n1 n2 -- n3 )
Opération Booléenne bit à bit ET.
arguments:
n1 Première opérande.
n2 Deuxième opérande.
retourne:
n3 Résultat de l'opération.
OR ( n1 n2 -- n3 )
Opération Booléenne bit à bit OU inclusif.
arguments:
n1 Première opérande.
n2 Deuxième opérande.
retourne:
n3 Résultat de l'opération.
XOR ( n1 n2 -- n3 )
Opération Booléenne bit à bit OU exclusif.
arguments:
n1 Première opérande.
n2 Deuxième opérande.
retourne:
n3 Résultat de l'opération.
NOT ( n1 -- n2 )
Opération Booléenne de négation.
Si n1==0 n2=-1.
Si n1<>0 n2=0.
arguments:
n1 Opérande.
retourne:
n2 Résultat de l'opération.
Description
Comparaisons algébriques.
0= ( n -- f )
Vérifie si n est égal à zéro. Retourne un indicateur Booléen.
arguments:
n Entier à vérifier. Est remplacé par l'indicateur Booléen.
retourne:
f Indicateur Booléen, vrai si n==0
0<> ( n -- f )
Vérifie si n est différent de zéro. Retourne un indicateur Booléen.
arguments:
n Entier à vérifier. Est remplacé par l'indicateur Booléen.
retourne:
f Indicateur Booléen, vrai si n<>0
0< ( n -- f )
Vérifie si n est plus petit que zéro. Retourne un indicateur Booléen.
arguments:
n Entier à vérifier. Est remplacé par l'indicateur Booléen.
retourne:
f Indicateur Booléen, vrai si n<0.
0> ( n -- f )
Vérifie si n est plus grand que zéro. Retourne un indicateur Booléen.
arguments:
n Entier à vérifier. Est remplacé par l'indicateur Booléen.
retourne:
f Indicateur Booléen, vrai si n>0.
= ( n1 n2 -- f )
Vérifie l'égalité des 2 entiers. Retourne un indicateur Booléen.
Les deux entiers sont consommés et remplacés par l'indicateur.
arguments:
n1 Première opérande.
n2 Deuxième opérande.
retourne:
f Indicateur Booléen, vrai si n1==n2.
<> ( n1 n2 -- f )
Vérifie si les 2 entiers sont différents. Retourne un indicateur Booléen.
Les deux entiers sont consommés et remplacés par l'indicateur.
arguments:
n1 Première opérande.
n2 Deuxième opérande.
retourne:
f Indicateur Booléen, vrai si n1<>n2.
< ( n1 n2 -- f )
Vérifie si n1 < n2. Retourne un indicateur Booléen.
Les deux entiers sont consommés et remplacés par l'indicateur.
Il s'agit d'une comparaison sur nombre signés.
arguments:
n1 Première opérande.
n2 Deuxième opérande.
retourne:
f Indicateur Booléen, vrai si n1 < n2.
> ( n1 n2 -- f )
Vérifie si n1 > n2. Retourne un indicateur Booléen.
Les deux entiers sont consommés et remplacés par l'indicateur.
Il s'agit d'une comparaison sur nombre signés.
arguments:
n1 Première opérande.
n2 Deuxième opérande.
retourne:
f Indicateur Booléen, vrai si n1 > n2.
U< ( u1 u2 -- f )
Vérifie si u1 < u2. Retourne un indicateur Booléen.
Les deux entiers sont consommés et remplacés par l'indicateur.
Il s'agit d'une comparaison sur nombre non signés.
arguments:
u1 Première opérande.
u2 Deuxième opérande.
retourne:
f Indicateur Booléen, vrai si u1 < u2.
U> ( u1 u2 -- f )
Vérifie si u1 > u2. Retourne un indicateur Booléen.
Les deux entiers sont consommés et remplacés par l'indicateur.
Il s'agit d'une comparaison sur nombre non signés.
arguments:
u1 Première opérande.
u2 Deuxième opérande.
retourne:
f Indicateur Booléen, vrai si u1 > u2.
Index