assembleur : multiplication de 2 nombres dans la norme IEEE

assembleur : multiplication de 2 nombres dans la norme IEEE - Programmation

Marsh Posté le 23-04-2001 à 13:17:30    

Comme j'ai dit dans le sujet je dois faire la multiplication de 2 nombres dans la norme IEEE et c'est assez balaise vu que je suis un débutant
Pouvez-vous m'aider ?
Merci d'avance

Reply

Marsh Posté le 23-04-2001 à 13:17:30   

Reply

Marsh Posté le 23-04-2001 à 16:20:12    

Tu parles de la représentation IEEE des nombres flottants ?

Reply

Marsh Posté le 23-04-2001 à 20:41:23    

oui

Reply

Marsh Posté le 23-04-2001 à 21:46:01    

Sur combien d'octets ? Parce que des représentations IEEE de flottants, il y en a pléthores ! J'ai déjà vu sur 4, 8 et 10 octets, et ça m'étonnerait pas qu'il y en ait d'autres !

Reply

Marsh Posté le 23-04-2001 à 22:48:42    

Alors alors ... petit cours sur le format IEEE ...
 
Les nombres à virgule flottante sont stockés dans les huit registres internes du coprocesseur sous la forme du standard IEEE : signe, exposant et mantisse. Ces registres ont une taille interne de 80 bits.
 
les nombres flottants sont utilisables en deux formats : le format 32 bits correspond aux flottants "simple précision" (float en C) : 1 bit de signe, 8 bits pour l'exposant et 23 bits pour la mantisse. Le format 64 bits correspond à la "double précision" (double en C) : 1 bit de signe, 11 d'exposant et 52 de mantisse.
 
On a donc la représentation suivante, qui correspond à la représentation normalisée des nombres scientifiques (IEEE) :
 
f = (-1)^signe x 2^(exposant-biais) x 1,mantisse
 
où f désigne le nombre flottant. Le biais est une valeur permettant de coder un exposant positif; il dépend du format de codage : si e est le nombre de bits représentant l'exposant, le biais vaut :
 
biais = 2^(e-1) -1
 
soit par exemple 1023 pour une représentation 64 bits (11 bits d'exposant), 127 en 32 bits. Le 1 de la mantisse est implicite, et seule la partie suivante est stockée. La représentation normalisée est donc :
 
[ signe | exposant | mantisse ]
 
Codons par exemple 5,25 sur 32 bits. 5,25 vaut 2^2 + 2^0 + 2^-2, ce qui nous donne en binaire 101,01 ou encore 1,0101 x 2^2. L'exposant vaut donc 2+127. on a donc la représentation suivante :
 
0   10000001  01010000000000000000000
s     exp            mantisse
 
 
En C ça donne ça :
 
float f;
unsigned long mf = *(long *)&f; // représentation IEEE de f
unsigned long sign = mf&0x80000000;  // signe
unsigned long exp = mf&0x7F800000;   // exposant
unsigned long mantisse = mf&0x7FFFFF;
 
Dès lors il est possible d'effectuer des calculs sur les flottants à partir de leur représentation IEEE. Par exemple, élever un flottant à la puissance n :
 
Le flottant est de la forme f = s . 2^(127+e) . 1,m.  
 
A la puissance n, on obtient :
 
f^n = s^n . 2^(127+n*e) . (1,m)^n
 
L'intérêt de la méthode réside en général dans l'accélération des caculs coûteux en cycles, tels que l'inverse (n=-1), la racine carrée (n=1/2) ou l'inverse de la racine carrée (n=-1/2).
 
Pour le signe et l'exposant c'est facile, pour la mantisse moins car il faut toujours se ramener à une représentation normalisée du type 1,m.
 
voili voilou...
j'espère que c'est pas trop confus.

 

[edit]--Message édité par z51--[/edit]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed