O que faz de erro de ponto flutuante -1. # J média?
-
20-08-2019 - |
Pergunta
Recentemente, às vezes (raramente) quando exportar dados de nossa aplicação, o log de exportação contém valores float que se parecem com "-1. # J". Eu não tenho sido capaz de reproduzi-lo, então eu não sei o que os olhares flutuar como em binário, ou como Visual Studio exibe-lo.
Eu tentei olhar para o código-fonte para printf, mas não encontrou nada (não 100% certo que eu olhei para a versão correta embora ...).
Eu tentei googling mas google joga fora qualquer #, parece. E eu não posso encontrar listas de erros flutuador.
Solução
Ele pode ser infinito negativo ou NaN (não um número). Devido à formatação do printf campo não faz distinção entre eles.
Eu tentei o seguinte código no 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
que resulta na seguinte saída:
1.#J
-1.#J
-1.#J
remover a 0,3 especificador de formatação dá:
1.#INF
-1.#INF
-1.#IND
então é claro 0/0 dá NaN e -1/0 dá infinito negativo (NaN, inf e + inf são a única "errônea" números de ponto flutuante, se bem me lembro)