Compter le nombre de chiffres après le". " dans les nombres à virgule flottante?

C'est une question d'entrevue.
Comment voulez-vous calculer le nombre de chiffres après . en nombre à virgule flottante.

par exemple, si 3.554 de sortie=3

pour 43.000 sortie=0.
Mon bout de code est ici

double no =3.44;
int count =0;
while(no!=((int)no))
{
    count++;
    no=no*10;
}
printf("%d",count);

Il y a quelques chiffres qui ne peuvent pas être indiqué par float type. par exemple, il n'y a pas de 73.487 dans float type, le nombre indiqué par float en c est 73.486999999999995 rapprochant d'elle.

Maintenant comment le résoudre comme il va, dans certains boucle infinie.

Remarque : les Spécifications de la norme IEEE 754, 32 bits en virgule flottante est divisé comme 24+7+1 bits. Les 7 bits indiquent la mantisse.

  • Alors, que faut-il faire lorsque vous passez une non-fin nombre décimal à elle? Le programme devrait en quelque sorte savoir que 73.486999999999995 est "réellement" 73.487? Êtes-vous sûr que le nombre décimal doit être un float, pas une chaîne de la représentation?
  • En supposant binaire à virgule flottante, tous les représentable nombres sont des multiples d'une partie de la puissance de deux; pas infiniment de répéter les nombres rationnels sont représentable.
  • Je donne 73.487 il va dans une boucle infinie. Je ne suis pas sûr si je la déclare en tant que double et d'une certaine manière c'est la conversion de chaîne de caractères. Mais pourquoi il devrait être une représentation de chaîne?
  • La meilleure façon de savoir, c'est que la virgule flottante représentation de deux nombres sont les mêmes. Donc, vous voulez le plus court fraction que les résultats de la même virgule flottante.
  • Comment géreriez-vous 2.00000? Et 1.99999999999999999999999999, comme compilateur autour d'elle?
  • Le résultat pour 2.00000 (ce qui est exactement représentable) est tout simplement 0. Et une question n'est pas stupide juste parce que la réponse est "vous ne pouvez pas le faire". C'est une bonne question si les OP et les autres lecteurs en apprendre quelque chose.
  • Cette question indique qu'un 32 bits float est divisée en 24 bits, 7 bits, 1 bit, et que les 7 bits de spécifier la mantisse. Ceci est incorrect. Le 32 bits IEEE-754 binaire à virgule flottante format a un bit de signe, huit bits pour l'exposant de codage, et 23 bits pour une significande encodage.

InformationsquelleAutor someone | 2013-07-24