|
Dernière réponse | |
---|---|
Sujet : assembleur : multiplication de 2 nombres dans la norme IEEE | |
z51 | 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] |
Vue Rapide de la discussion |
---|