math

index
index principal

Description

Ce module contient les opérateurs arithmétiques, logiques et relationnels.
index principal

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.
index
haut
index principal

MAX-INT ( -- n )

Constante retourant la valeur du plus grand entier signé.

arguments:
aucun   
retourne:
n   Valeur du plus grand entier signé.
index
haut
index principal

MIN-INT ( -- n )

Constante retournant le plus petit entier signé.

arguments:
aucun   
retourne:
n   Plus petit entier signé.
index
haut
index principal

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  
index
haut
index principal

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  
index
haut
index principal

+ ( 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
index
haut
index principal

- ( 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.
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

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
index
haut
index principal

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
index
haut
index principal

+! ( 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  
index
haut
index principal

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
index
haut
index principal

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.
index
haut
index principal

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
index
haut
index principal

* ( 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.
index
haut
index principal

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.
index
haut
index principal

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é.
index
haut
index principal

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.
index
haut
index principal

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
index
haut
index principal

/ ( 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.
index
haut
index principal

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.
index
haut
index principal

*/ ( 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.
index
haut
index principal

*/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
index
haut
index principal

/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
index
haut
index principal

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
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

ABS ( n1 -- n2 )

Retourne la valeur absolue d'un entier simple.

arguments:
n1   Entier simple signé.
retourne:
n2   La valeur absolue de n1.
index
haut
index principal

DABS ( d1 -- d2 )

Retourne la valeur absolue d'un entier double.

arguments:
d1   Entier double signé.
retourne:
d2   Valeur absolue de d1.
index
haut
index principal

S>D ( n -- d )

Convertie entier simple en entier double.

arguments:
n   Entier simple signé.
retourne:
d   Entier double signé.
index
haut
index principal

?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
index
haut
index principal

SM/REM ( d1 n1 -- n2 n3 )

Division symétrique entier double par simple arrondie vers zéro.
REF: http://lars.nocrew.org/forth2012/core/SMDivREM.html
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.
index
haut
index principal

FM/MOD ( d1 n1 -- n2 n3 )

Division double/simple arrondie au plus petit.
REF: http://lars.nocrew.org/forth2012/core/FMDivMOD.html
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.
index
haut
index principal

EVAR+ ( a-addr -- )

Incrémente une variable résidante en mémoire EDS.

arguments:
a-addr   Adresse de la variable.
retourne:
rien  
index
haut
index principal

EVAR- ( a-addr -- )

Décrémente une variable résidante en mémoire EDS.

arguments:
a-addr   Adresse de la variable.
retourne:
rien  
index
haut
index principal

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.
index
haut
index principal

NEGATE ( n1 -- n2 )

Inverse arithmétique de n1. Complément de 2.

arguments:
n1   Entier à inversé.
retourne:
n2   n2=-n1
index
haut
index principal

DNEGATE ( d1 -- d2 )

Inverse arithmétique d'un entier double. Complément de 2.

arguments:
d1   Entier double à inversé.
retourne:
d2   d2=-d1
index
haut
index principal

INVERT ( n1 -- n2 )

Inversion des bits, complément de 1.

arguments:
n1   Entier simple.
retourne:
n2   Inverse bit à bit de n1.
index
haut
index principal

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.
index
haut
index principal

Description

opérations logiques bit à bit.
index principal

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
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

Description

Comparaisons algébriques.
index principal

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
index
haut
index principal

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
index
haut
index principal

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.
index
haut
index principal

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.
index
haut
index principal

= ( 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.
index
haut
index principal

<> ( 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.
index
haut
index principal

< ( 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.
index
haut
index principal

> ( 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.
index
haut
index principal

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
haut
index principal

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
haut
index principal

Index


haut
index principal