Question

Récemment, parfois (rarement) lorsque nous exportons des données depuis notre application, le journal d'exportation contient des valeurs flottantes qui ressemblent à "-1. # J". Je n'ai pas été capable de le reproduire, donc je ne sais pas à quoi ressemble le float en binaire, ni comment Visual Studio l'affiche.

J'ai essayé de regarder le code source de printf, mais je n'ai rien trouvé (mais je ne suis pas sûr à 100% d'avoir regardé la bonne version ...).

J'ai essayé de googler, mais Google jette tout #, semble-t-il. Et je ne trouve aucune liste d’erreurs de flottement.

Était-ce utile?

La solution

Il peut s'agir d'un infini négatif ou de NaN (pas un nombre). En raison de la mise en forme sur le champ, printf ne les différencie pas.

J'ai essayé le code suivant dans Visual Studio 2008:

double a = 0.0;
printf("%.3g\n", 1.0 / a);  // +inf
printf("%.3g\n", -1.0 / a); // -inf
printf("%.3g\n", a / a);    //  NaN

qui donne le résultat suivant:

1.#J
-1.#J
-1.#J

la suppression du spécificateur de formatage .3 donne:

1.#INF
-1.#INF
-1.#IND

il est donc clair que 0/0 donne NaN et -1/0 donne un infini négatif (NaN, -inf et + inf sont les seuls nombres en virgule flottante "erronés", si mes souvenirs sont exacts)

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