2010-04-10 6 views
13

Par exemple, pour le float tapez en c, selon la spécification IEEE à virgule flottante, il y a 8 bits utilisés pour la fraction déposée, et il est calculé comme premier pris ces 8 bits et traduit en nombre non signé, puis moins le BIASE, qui est 2^7 - 1 = 127, et le résultat est un exposant va de -127 à 128 inclus. Mais pourquoi ne pouvons-nous pas traiter ce motif de 8 bits comme un nombre signé, puisque la plage résultante est [-128,127], ce qui est presque la même chose que la précédente.Pourquoi le nombre à virgule flottante IEEE calcule l'exposant en utilisant un formulaire biaisé?

+0

Bonne question. Aussi pourquoi il y a le bit de signe stupide, au lieu de traiter la mantisse comme un complément à deux, comme le font les gens normaux. –

+1

@Pavel Radzivilovsky: Vous ne pouvez pas traiter la mantisse comme un complément à deux, car elle est normalisée avec un bit haut implicite. Quel serait l'avantage du complément à deux dans ce cas de toute façon? –

Répondre

16

Le but de la polarisation est que l'exposant soit stocké sous la forme non signée, facilitant ainsi les comparaisons. De Wikipedia:

En disposant les champs de sorte que le signe bit est le bit le plus significatif position, l'exposant biaisée dans le milieu , alors la mantisse dans les moindres bits significatifs, la valeur résultante volonté ordonné correctement, que ce soit interprété comme une virgule flottante ou valeur entière. Cela permet des comparaisons à grande vitesse des nombres à virgule flottante en utilisant un matériel à point fixe.

Donc, fondamentalement, un nombre à virgule flottante est:

[sign] [unsigned exponent (aka exponent + bias)] [mantissa] 

This website fournit d'excellentes informations sur les raisons de ce qui est bon - en particulier, comparez les mises en œuvre des fonctions de comparaison à virgule flottante.

En outre, aucune réponse complète sur les bizarreries à virgule flottante peut aller sans mentionner "What Every Computer Scientist Should Know About Floating-Point Arithmetic". C'est long, dense et un peu lourd sur les maths, mais il est dense mathématique d'or (ou quelque chose comme ça).

+0

Semble comme une excuse d'un ingénieur électronique pauvres pour moi ... –

+2

@Pavel, il ya encore des processeurs sans FPU, f.e. Bras. Rendre au moins cette opération facile à faire sur les entiers rend l'émulation FPU plus rapide. – liori

+1

@liori récents processeurs ARM ont FPUs [1], mais, @Pavel, lorsque la spécification à virgule flottante IEEE-754 a été acceptée en 1985, la plupart des processeurs * n'ont pas *. Par exemple, le 8086 - l'original x86! - seulement eu une FPU via un processeur d'extension en option, le 8087 "x87". Le FPU n'a été inclus que jusqu'au 80486, qui a été introduit en 1989. [2] [1] http://www.arm.com/products/processors/technologies/vector-floating-point.php [2] ] http://en.wikipedia.org/wiki/Floating-point_unit#Add-on_FPUs –

Questions connexes