2009-11-04 2 views

Répondre

5

Sur la plupart des plates-formes, C double est la même que la IEEE 754 double precision format. La valeur positive la plus proche de zéro supportée est de 2^-1022 (ce qui est égal à 1/2^1022). Cependant, si vous autorisez des types définis par l'utilisateur, il n'y a pas de limite, car vous pouvez toujours exprimer l'exposant comme un bigint.

-1

Si vous stockez votre variable sous la forme d'un exposant négatif de 64 bits, 1/2^(2^63 - 1). :)

C'est un nombre reeeeally petit.

+0

Vérifiez vos maths ici - un exposant de 64 bits devrait permettre jusqu'à 1/(2^(2^63-1)) – bdonlan

+0

Là, corrigé. :) –

1

Si vous utilisez le GNU MP library (écrit en C), vous pouvez représenter n'importe quelle valeur jusqu'à la quantité d'installation RAM.

1

0, soit 1/(2^inf);)

Plus sérieusement, ceci est une question de bits d'exposant de flotteurs à double précision. Je ne pense pas que la norme C définisse elle-même la taille, mais IEEE 754 la définit pour avoir 11 bits exposants.

Permet d'ignorer les dénormals pendant un petit moment. Puisque la plus petite valeur d'exposant est -1022, cela devrait être 1/(2^1022). Mais il y a aussi le cas des dénormaux, que IIRC ne devrait tout simplement pas contenir de bits implicites. Les nombres dénormaux sont ainsi répartis uniformément sur la plage 0..1/(2^1022), donnant à log2 (52) plus de valeurs IIRC. Donc, je pense que la réponse finale devrait être 1/(2^(1074)).

3

avec IEEE-754 double pour l'arithmétique, la plus petite valeur exacte de 1/2^n est:

  • 2^-1022 si votre plate-forme ne prend pas en charge denormal
  • 2^-1023 si votre plate-forme a le support dénormal, mais vous insistez sur le calcul en utilisant 1.0/2^n; c'est parce que 2^1023 est la plus grande puissance exacte représentable de deux dans double.
  • 2^-1074 si votre plate-forme est compatible avec la dénormalisation et si cela ne vous dérange pas de spécifier directement la valeur, par exemple avec la notation hexadécimale hexadécimale C99: 0x1.0p-1074 ou 0x0.0000000000001p-1022.

Si vous utilisez un autre type, par exemple long double sur une machine x86 avec un compilateur qui que pour float 80 bits, la plus petite valeur peut être beaucoup plus petit (2^-16446, en supposant que je l'ai fait mon arithmétique correctement =)

Questions connexes