Question

Peut-double (d'un nombre donné d'octets, avec un équilibre mantisse / exposant raisonnable) toujours tenir pleinement avec précision la portée d'un entier non signé de la moitié de ce nombre d'octets?

par exemple. peut huit octets doubler tenir pleinement avec précision la gamme de nombres d'un unsigned int quatre octets?

Ce que cela va faire bouillir jusqu'à un flotteur est si deux octets peut contenir la plage d'un seul octet unsigned int.

A un octet non signée sera int bien sûr être 0 -.> 255

Était-ce utile?

La solution

Un IEEE754 64 bits double peut représenter un entier de 32 bits, tout simplement parce qu'il a 53-impair (a) bits disponibles pour la précision et le nombre entier 32 bits n'a besoin que, bien, 32 : -)

Il serait plausible pour un (non IEEE754 double précision) nombre à virgule flottante de 64 bits pour avoir moins de 32 bits de précision. Cela permettrait à un nombre vraiment énorme (en raison de l'exposant) mais au prix de précision.

L'essentiel est que, pourvu qu'il n'y ait plus de bits de précision de la mantisse du nombre à virgule flottante qu'il n'y a dans le nombre entier (et suffisamment de bits en l'exposant à elle échelle), alors il peut être représenté sans perte de précision.


(a) Techniquement, le 53ème bit de précision est un 1 implicite au début de la séquence de sorte que la quantité de « Variabilité » ne peut être 52 bits. Que ce soit 52 ou 53, il est encore assez bits pour représenter chaque entier de 32 bits.

Autres conseils

Oui. Un flotteur (ou double) est garantie pour représenter exactement tout entier qui n'a pas besoin d'être tronquée. Pour un lit double, il y a 53 bits de précision, de telle sorte que est plus que suffisant pour représenter exactement un nombre entier quelconque de 32 bits, et une proportion minuscule (statistiquement) de 64 celles de bits aussi.

Exactement ce que la plage est que vous pouvez représenter dépend exactement sur beaucoup de facteurs dans votre mise en œuvre, mais vous pouvez le minorante en disant que, si le champ d'exposant est réglé sur 0, vous pouvez exactement représenter des entiers jusqu'à la largeur de votre champ mantisse (en supposant un bit de signe). Pour IEEE 754 double précision, cela signifie que vous pouvez représenter des nombres 52 bits exactement. En général, votre mantisse sera plus de la moitié de la largeur de la structure globale.

Pour plus de détails sur la façon dont un double œuvres, vous voudrez peut-être regarder ce blog: Anatomie d'un nombre à virgule flottante .

Je ne voudrais pas utiliser les mots « pleinement avec précision » quand on parle de nombres à virgule flottante. Mais oui, un double peut représenter un entier de 32 bits.

Je ne sais pas quelles autres combinaisons de flotteurs et ints que cela est également vrai pour.

En pratique, vous ne voulez pas vous embêter en utilisant le point flottant au-dessus de ce que vos supports de la machine, donc il suffit de passer à l'arithmétique rationnelle avec bignums. De cette façon, vous êtes assuré de précision.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top