您的位置:首页 > 其它

What does floating point error -1.#J mean?

2011-11-02 20:15 323 查看

What does floating point error -1.#J mean?

up vote
4
down vote
favorite
share [fb]
share [tw]
Recently, sometimes (rarely) when we export data from our application, the export log contains float values that look like "-1.#J". I haven't been able to reproduce it so I don't know what the float looks like in binary, or how Visual Studio displays it.

I tried looking at the source code for printf, but didn't find anything (not 100% sure I looked at the right version though...).

I've tried googling but google throws away any #, it seems. And I can't find any lists of float errors.

c++

c
floating-point
printf
link|improve this question
asked
May 8 '09 at 14:32




Srekel

349110

83% accept rate
See also:
stackoverflow.com/questions/5541975/what-does-1-mean/… – Loki Astari
Apr 4 at 18:54
feedback

1 Answer

activeoldestvotes

up vote
14
down voteaccepted
It can be either negative infinity or NaN (not a number). Due to the formatting on the field printf does not differentiate between them.

I tried the following code 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

which results in the following output:

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

removing the .3 formatting specifier gives:

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

so it's clear 0/0 gives NaN and -1/0 gives negative infinity (NaN, -inf and +inf are the only "erroneous" floating point numbers, if I recall correctly)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: