HTML5 - CSS 2.x/3
PHP / MySQL
FORTH ...

Les opérateurs de fractions

Les opérations fractionnaires sont au programme des cours moyen 1 et deux de l'école primaire. Ce programme se propose de définir des opérateurs permettant d'opérer sur des fractions et restituer des résultats fractionnaires.

Tout le monde sait que 1/3 est plus précis que 0,33333333.... Donc 3*(1/3) donne 1. Mais l'utilisation d'une calculatrice classique ne donne jamais un résultat exact, car le calcul intermédiaire restituera un développemnt infini.

Des opérateurs fractionnaires

Si le calcul de certaines fractions donne un développement limité lors de la division des deux membres de la fraction, les résultats ayant un développement infini restent la bête noire des puristes. En FORTH, langage doué pour le traitement des nombres entiers, la définition d'opérateurs fractionnaires est réalisée en une trentaine de lignes de programme.

Recherche du PGCD

Le mot PGCD recherche le plus grand commun diviseur de deux nombres entiers 16 bits

: PGCD  ( n1 n2 --- pgcd)
   2DUP  <
   IF SWAP THEN
   BEGIN
      SWAP  OVER MOD DUP  0=
   UNTIL
   DROP ;
\  11 121 PGCD .   affiche 11
\  30  42 PGCD .   affiche 6


Recherche du PPCM

Le mot PPCM recherche le plus petit commun multiple de deux nombres entiers

: PPCM ( n1 n2 --- ppcm)
   2DUP PGCD */ ;
\  11 121 PPCM .     affiche 121
\  32  42 PPCM .     affiche 210

Le PPCM permet de déterminer le premier multiple commun à deux nombres. Cette routine n'est pas utilisée dans les opérateurs fractionnaires.

Inversion de fraction

: FRINV ( n1 n2 --- n2 n1)
   SWAP ;
\  1 3 FRINV . .     affiche 1 3
\   1/3 inversé donne 3/1

L'inverse d'une fraction consiste à permutter numérateur et dénominateur.

Le mot FRINV exécute un simple SWAP.

Réduction de fraction

La réduction de fraction transforme une fraction en supprimant les diviseurs communs:

: REDUIT ( n d --- n2 d2)
   2DUP PGCD
   DUP ROT SWAP / >R / R> SWAP ;
\  11 121 REDUIT . .      affiche 1 11   ( 11/121 = 1/11 )
\  30  42 REDUIT . .      affiche 5 7    ( 30/42  = 5/7  )

Multiplication et division de deux fractions

La multiplication de fraction consiste à multiplier membre à membre les éléments de chaque fraction:

: FR* ( fr1 fr2 --- fr1*fr2)
   SWAP >R *
   SWAP R> * SWAP REDUIT ;
: FR/ ( fr1 fr2 --- fr1/fr2)
   FRINV FR* ;

Exemple:

  11 121 30 42 FR* . .   affiche 5 77   ( (11/121)*(30/42) = 5/77 )

Le résultat du produit de deux fractions est automatiquement réduit. Dans le cas du produit de deux fractions constituées de numérateurs et de dénominateurs importants, il est fortement conseillé d'opérer une réduction de fraction avant d'opérer le produit des fractions.

Exemple:

  11 121 REDUIT  30 43 REDUIT  FR*

La division de deux fractions consiste à effectuer le produit d'une fraction par l'inverse de la seconde fraction.

Exemple:

  11 121 30 42 FR/ . .   affiche 7 55   ( (11/121)/(30/42) = 7 55 )

Addition et soustraction de deux fractions

La somme de deux fractions avec le même dénominateur est égale à la somme des numérateurs sur le dénominateur. Si dans un calcul les deux dénominateurs sont des multiples, il faut multiplier la fraction avec le dénominateur le plus petit par le nombre nécessaire pour avoir deux fractions de même dénominateur.

: FR+ ( f1 f2 --- fr1+fr2)
   >R OVER *
   ROT R@ * +
   SWAP R> * REDUIT ;
: FRMINUS ( fr --- -fr)
   SWAP NEGATE SWAP ;
: FR- ( fr1 fr2 --- fr1-fr2)
   FRMINUS FR+ ;

Exemple:

  3 4 4 5 FR+ . .   affiche 31 20  (3/4 + 4/5 = 31/20)
  3 4 4 5 FR- . .   affiche 1 -20  (3/4 - 4/5 = -1/20)

Traitement de variables et constantes fractionnaires

\ gestion de variables et constantes fractionnaires
: FR@ ( adr --- n d)
   2@ ;
: FR! ( n d adr ---)
   2! ;
: FRVAR ( --- <mot>)
   2VARIABLE ;
: FRCONST ( n d --- <mot>)
   2CONSTANT ;

Ces mots permettent de stocker des fractions dans des variables ou des constantes. Exemple:

355 113 FRCONST FR-PI  \ constante de PI sous forme fractionnaire
                       \ approchée à 6 décimales
FR-PI 3 4 FR* . .      \ affiche 1065 452  (PI * 3/4) 
FR-PI 2 1 FR* . .      \ affiche 710 113   (PI * 2   ou   PI * 2/1)

Voici ce que donnerait une valeur angulaire d'une fraction de la constante PI de 1 degré:

  FR-PI 1 180 FR* . .   affiche   71 4068  (PI/180 = 71/4068 = 0.017453294)

Sur une calculatrice, en exploitant la constante PI préprogrammée, on obtient PI/180 = 0.01745329251

Conclusion

L'exploration des fractions est une branche très intéressante de l'arithmétique. Les calculatrices classiques seront frustrantes pour analyser les propriétés très intéressantes de cet univers.

On voit, au travers du dernier exemple, qu'il est possible de travailler avec une valeur approchée de PI et obtenir des résultats ayant une précision étonnante.