web-dev-qa-db-fra.com

Comment convertir d'un nombre décimal au format à virgule flottante simple précision IEEE 754?

Comment changer manuellement un nombre décimal (base 10) au format à virgule flottante simple précision IEEE 754? Je comprends qu'il y a trois parties, un signe, un exposant et une mantisse. Je ne comprends tout simplement pas ce que représentent réellement les deux dernières parties.

20
tgai

Trouvez la plus grande puissance de 2 qui est plus petite que votre nombre, par exemple si vous commencez par x = 10,0 puis 23 = 8, donc l'exposant est 3. L'exposant est biaisé de 127, ce qui signifie que l'exposant sera représenté par 127 + 3 = 130. La mantisse est alors 10,0/8 = 1,25. Le 1 est implicite, nous avons donc juste besoin de représenter 0,25, ce qui est 010 0000 0000 0000 0000 0000 lorsqu'il est exprimé comme une quantité fractionnaire non signée de 23 bits. Le bit de signe est 0 pour positif. Nous avons donc:

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 ex.

#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
Paul R

Prenez un nombre 172,625. Ce nombre est au format Base10.

Convertir ce format au format base2 Pour cela, convertissez d'abord 172 pouces au format binaire

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

Convertir 0,625 pouce au 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écaler 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 pouces au format binaire

134=10000110

Le nombre est positif donc signe du nombre 0

0 |10000110 |01011001010000000000000

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

11
RAHUL KUMAR

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

4,007516 × 10septm

L'exposant n'est que cela: la puissance de dix ici. La mantisse est les chiffres réels du nombre. Et le signe, bien sûr, est juste positif ou négatif. Donc dans ce cas, l'exposant est 7 et la mantisse est 4,007516.

La seule différence significative entre 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:

2,56 × 102 (mantisse 2,56 et exposant 2),

dans IEEE754, c'est

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

8
Crashworks