Comment convertir les nombres décimaux en IEEE 754?

Comment faire pour changer manuellement un nombre décimal (base 10) en format IEEE 754 mono-précision à virgule flottante? Je comprends qu'il y est de trois pièces, un signe, un exposant, et une mantisse. Je ne comprends pas tout à fait ce que les deux dernières parties représentent réellement.

20
demandé sur Pascal Cuoq 2010-03-08 23:56:57

3 réponses

trouver la plus grande puissance de 2 qui est plus petite que votre nombre, E. g Si vous commencez avec x = 10.0 alors 23 = 8, donc l'exposant est 3. L'exposant est biaisée par 127 cela signifie donc l'exposant sera représenté comme 127 + 3 = 130. Le mantissa est alors 10.0 / 8 = 1.25. Le 1 est implicite donc nous avons juste besoin de représenter 0.25, qui est 010 0000 0000 0000 0000 lorsqu'elle est exprimée en quantité fractionnaire non signée de 23 bits. Le signe est 0 pour positif. Nous avons donc avoir:

s | exp [130]  | mantissa [(1).25]            |

0 | 100 0001 0 | 010 0000 0000 0000 0000 0000 |

0x41200000

vous pouvez tester la représentation avec un simple programme C, par exemple

#include <stdio.h>

typedef union
{
    int i;
    float f;
} U;

int main(void)
{
    U u;

    u.f = 10.0;

    printf("%g = %#x\n", u.f, u.i);

    return 0;
}
26
répondu Paul R 2010-03-09 06:57:36

prenez le numéro 172,625.Ce numéro est de format Base10.

convertir ce format est au format base2 Pour cela, convertissez d'abord 172 en format binaire

128 64 32 16 8 4 2 1
 1  0  1  0  1 1 0 0
172=10101100

Convertir 0.625 en format binaire

0.625*2=1.250   1
0.250*2=.50     0
0.50*2=1.0      1
0.625=101

format binaire de 172,625=10101100.101. C'est au format base2 10101100*2

Décalage de ce nombre binaire

1.0101100*2 **7      Normalized
1.0101100 is mantissa
2 **7 is exponent

ajouter l'exposant 127 7+127=134

convertir 134 en format binaire

134=10000110

le nombre est positif donc signe du nombre 0

0 |10000110 |01011001010000000000000

Explication: Le niveau élevé de bits est le signe du nombre. le nombre est stocké dans un format de magnitude de signe. L'exposant est stocké dans un format de champ de 8 bits biaisé par 127 à l'exposant Le chiffre à droite du point binaire stocké dans l'ordre bas de 23 bits. REMARQUE---C'est le format IEEE de 32 bits à virgule flottante au format

11
répondu RAHUL KUMAR 2013-09-29 07:42:26

Un nombre à virgule flottante est tout simplement notation scientifique. Disons que je vous ai demandé d'exprimer l' circonférence de la Terre en mètres, en utilisant la notation scientifique. Vous écrivez:

4.007516×10 7 m

exposant est juste cela: le pouvoir de dix ici. La mantisse est le réel chiffres du numéro. Et le signe, bien sûr, positif ou négatif. Dans ce cas, l'exposant est 7 et la mantissa est 4.007516 .

la seule différence significative entre le IEEE754 et la notation scientifique de l'école primaire est que les nombres à virgule flottante sont en base 2, donc ce n'est pas dix fois la puissance de quelque chose, c'est deux fois la puissance de quelque chose. Donc, où vous écririez, disons, 256 en notation scientifique humaine ordinaire comme:

2,56×10 2 (mantisse de 2,56 et l'exposant 2),

dans IEEE754, c'est

1×2 8 - la mantisse est 1 et l'exposant est 8.

8
répondu Crashworks 2010-03-08 21:55:46