Question

J'ai un double qui n'est pas nécessairement positif mais généralement.Il peut être 0.xxxx000 ou x.xxxx00000 ou XX.00000 ou 0.xxx0xxx00000, où finalement, il y a tous les 0 à la droite du dernier numéro.J'ai besoin de garder une trace de combien de chiffres il y a.J'ai eu des problèmes avec cela, toute aide?Ceci est c.

Était-ce utile?

La solution

Utilisez Sprintf pour la transformer en une chaîne et faire ce que vous devez compter / tester à faire sur les chiffres

Autres conseils

Un double a 52 bits de Mantissa, ainsi qu'un bit implicite "1", vous devriez donc être capable de taper le punch un double pointeur sur un entier 64 bits (obtenir les bits bruts dans un entier), et= ceci avec (1 << 52) -1, et |= le résultat avec (1 << 52).

Le log10 de ce serait le nombre de chiffres décimaux.

Cependant, je suis presque enclin à dire "aller avec la solution de Jonsque" car il est si ingénieusement simple (il mérite une +1 en tout cas d'être embrassé).

La représentation du double n'est pas décimale - elle est binaire (comme tous les autres numéros d'un ordinateur).Le problème que vous avez défini n'a guère de sens.Considérez l'exemple: le numéro 1.2 est converti en binaire - 1 + 1/5= 1. (0011) binaire [0011 en période].Si vous le coupez à 52 bits de précision (double) - vous aurez 1,0011001100110011001100110011001100110011001100110011 Binary qui équivaut à 1+ (1-1 / 2 ^ 52) / 5.Si vous représentez ce nombre sous forme décimale, vous obtiendrez 52 décimales avant tous les zéros qui sont beaucoup plus que la précision décimale maximale d'un double qui correspond à 16 chiffres (et tous ces chiffres de la représentation de 17 à 52 n'ont que de sens)..

Quoi qu'il en soit si vous avez un problème purement abstrait (comme à l'école):

int f( double x )
{
  int n = 0;

  x = fabs(x);
  x -= floor(x);

  while( x != floor(x) )
  {
    x *= 2;
    ++n;
  }

  return n;
}

La fonction renvoie le nombre de chiffres binaires avant tous les zéros et il s'agit également du nombre de chiffres décimaux avant tous les zéros (le dernier chiffre décimal est toujours 5 si la valeur renvoyée> 0).

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