Document fait avec Nvu Document made with Nvu




Calculs en virgule flottante

Instructions
Utilisation
Exemple

Principe

Les calculs en virgule flottante son nécessaires pour l'évaluation des fonctions mathématiques et il est donc indispensable d'en disposer dans tout système informatique qui se respecte.

J'ai choisi le format normalisé IEEE décliné en simple précision dans le mini système et en double précision dans son grand frère :

  • IEEE simple précision (+/-5,8774e-39 à +/-170,14e36)
le nombre est codé sur 32 bits:
- bit 31 pour le signe S (0 pour un nombre positif),
- bits 30 à 23 pour l'exposan E (8 bits) avec un biais de 127,
- bits 22 à 0 pour la mantisse M (23 bits) sachant que le bit 23 toujours à 1 est supprimé.
Si E=255 et M#0 alors ce n'est pas un nombre à virgule flottante.
Si E=255 et M=0 alors c'est l'infini avec le signe de S.
Si 0<E<255 alors le nombre est normalisé.
Si E=0 et M#0 alors le nombre es dénormalisé.
Si E=0 et M=0 alors le nombre es nul. 
  • IEEE double précision (+/-11,125e-309 à +/-89,884e306)
le nombre est codé sur 64 bits (2 niveaux de pile sur mon système):
- bit 63 pour le signe S (0 pour un nombre positif),
- bits 62 à 52 pour l'exposan E (11 bits) avec un biais de 1023,
- bits 51 à 0 pour la mantisse M (52 bits) sachant que le bit 52 toujours à 1 est supprimé.
Si E=2047 et M#0 alors ce n'es pas un nombre à virgule flottante.
Si E=2047 et M=0 alors c'est l'infini avec le signe de S.
Si 0<E<2047 alors le nombre est normalisé.
Si E=0 et M#0 alors le nombre es dénormalisé.
Si E=0 et M=0 alors le nombre es nul.

Les algorithmes des fonctions mathématiques sont basés sur ceux présentés dans le livre suivant:

  • "implantation des fonctions usuelles en 68000" de François BRET aux éditions MASSON.

Certaines instructions sont des développements limités uniquement utilisés pour l'élaboration des fonctions mathématiques.


Instructions

ATTENTION: "flottant" dans la liste des paramètres indique un nombre de 32 bits donc 1 seul niveau de pile pour le mini système, et un nombre de 64 bits donc 2 niveaux de pile pour son grand frère.

flottant FNEGATE -flottant

Valeur opposée (inversion de S)

flottant FABS abs(flottant)

Valeur absolue (mise à 0 de S)

exposant,n* NORM flottant

Normalisation de la mantisse d'un nombre
*: n occupe 2 niveaux de la pile en IEEE double précision

flottant1,flottant2 F+ flottant1+flottant2

Addition

flottant1,flottant2 F- flottant1-flottant2

Soustraction

flottant1,flottant2 F* flottant1*flottant2

Multiplication

flottant1,flottant2 F/ flottant1/flottant2

Division

flottant INT n

Conversion flottant vers entier signé (32 bits)

n UFLOAT flottant

Conversion entier signé (32 bits) vers flottant

 

flottant,n PUISSANCE flottant^n

Elévation du flottant à la puissance n

flottant1,flottant2 F/MOD flottant1-(n*flottant2),n

Calcul du reste et du quotient (entier signé 32 bits) de la division de 2 flottants

flottant,adresse FCONVERT flottant',adresse'

Conversion de la chaîne de caractère pointée par adresse en nombre flottant jusqu'au premier caractère non convertible

flottant <##F#> adresse,n

Conversion d'un flottant en chaîne de n caractères pointée par adresse
6 chiffres significatifs en simple précision et 12 en double précision

flottant F. -

Affichage d'un flottant sur la sortie terminal

flottant FSQRT flottant'

Extraction de la racine carrée d'un flottant

flottant FEXP0 flottant'

Calcul de l'exponentielle d'un flottant par développement limité

flottant FLN0 flottant'

Calcul du logarithme népérien d'un flottant par développement limité

flottant FEXP flottant'

Calcul de l'exponentielle d'un flottant

flottant FLN flottant'

Calcul du logarithme népérien d'un flottant

- FPI flottant

Constante PI

flottant FATAN0 flottant'

Calcul de l'arc-tangente d'un flottant par développement limité

arc,y,x,ki,fatan(ki) AJUSTEXY arc',y',x'

Sous programme pour calcul de la tangente de l'angle moitié

flottant FTANU flottant'

Calcul de la tangente de l'angle moitié

flottant FTAN flottant'

Calcul de la tangente

flottant FSIN flottant'

Calcul du sinus

flottant FCOS flottant'

Calcul du cosinus

flottant FATAN flottant'

Calcul de l'arc-tangente

flottant FASIN flottant'

Calcul de l'arc-sinus

flottant FACOS flottant'

Calcul de l'arc-cosinus


Utilisation

En ce qui concerne le mini système, les instructions de calcul en virgule flottante s'utilisent comme celles des nombres entiers. Seul le format change.

Pour le système principal, il ne faut pas oublier que chaque nombre flottant se décompose en 2 nombres sur la pile. Il faut donc prendre certaines précautions pour les manipuler.

L'instruction "DUP" devra être remplacée par la suite "OVER OVER".

L'instruction "DROP" devra être remplacée par la suite "DROP DROP".

On peut imaginer la création des instructions suivantes:

: FDUP OVER OVER ;

: FDROP DROP DROP ;

A vous d'imaginer l'équivalen des autres instructions de manipulation de la pile pour les nombres flottants 64 bits...


Exemple

Pour illustrer cette présentation, voici le résultat du calcul de 3 valeurs souvent utilisées en mathématique (IEEE double précision):

la constante PI:


la racine carrée de 2:


la constante e: