2017-07-17 7 views
0

double peut représenter toutes les valeurs qu'un flotteur peut représenter. Est-ce que convertir le flotteur en double suffit simplement à étendre la mantisse en ajoutant 0 et à étendre la partie de l'exposant en remplissant les bits de signe? J'ai testé quelques données à http://www.binaryconvert.com/index.html. Cela fonctionne de cette manière. Mais je n'ai trouvé aucune définition officielle de la conversion. Est-ce que la conversion a un cas de coin ne fonctionne pas de cette façon?Comment la conversion float fonctionne-t-elle en double?

+7

Je pense que vous posez des questions sur IEEE-754 (le format à virgule flottante le plus courant), pas sur le langage C. Ce dernier n'a essentiellement rien à voir avec cela. –

Répondre

6

Cela a très peu à voir avec C; sa seule garantie est que la conversion de float à double doit préserver la valeur.

Donc, vous demandez vraiment à propos de (vraisemblablement) IEEE-754. Il y a au moins quelques façons dont votre description ne comprend pas:

  1. Les exposants pour simple précision et double précision ont différents biais. La conversion nécessite donc plus qu'une simple extension de signe.

  2. Les nombres dénormaux nécessitent un traitement spécial (ils deviennent des nombres normaux). Les NaNS peuvent également nécessiter une manipulation spéciale - la distinction entre la signalisation et les NaNs tranquilles dépend de la valeur de la mantisse.

+0

Étant donné une valeur flottante, peut-on encore savoir qu'il s'agit d'un nombre dénormal ou d'un nombre normal? J'avais pensé que tous les nombres dénormaux sont arrondis dans le nombre normal le plus proche. Et tous les nombres normaux en float doivent être normaux en double. –

+0

Pourriez-vous s'il vous plaît donner un exemple du problème de biais dans la partie exposants? –

+0

@JoeC - L'exposant est défini comme étant toujours positif. Il est possible que la conversion soit équivalente à l'extension de signe, mais je n'y ai pas réfléchi complètement;) –