Cosa significa errore in virgola mobile -1. # J?
-
20-08-2019 - |
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.
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)