Domanda

Di recente, a volte (raramente) quando esportiamo dati dalla nostra applicazione, il registro di esportazione contiene valori float che sembrano " -1. # J " ;. Non sono stato in grado di riprodurlo, quindi non so come appare il float in binario o come Visual Studio lo visualizza.

Ho provato a guardare il codice sorgente per printf, ma non ho trovato nulla (non sicuro al 100% di aver guardato la versione giusta però ...).

Ho provato a cercare su Google ma google butta via qualsiasi #, a quanto pare. E non riesco a trovare alcun elenco di errori float.

È stato utile?

Soluzione

Può essere infinito negativo o NaN (non un numero). A causa della formattazione sul campo printf non fa distinzioni tra loro.

Ho provato il seguente codice in 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

che risulta nel seguente output:

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

la rimozione dell'identificatore di formattazione .3 dà:

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

quindi è chiaro 0/0 dà NaN e -1/0 dà infinito negativo (NaN, -inf e + inf sono gli unici numeri a virgola mobile "errati", se ricordo bene)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top