最近,有时(很少)从我们的应用程序导出数据时,导出日志包含看起来像“-1。#J”的浮点值。我无法重现它,所以我不知道浮点数在二进制文件中是什么样的,或者Visual Studio如何显示它。
我试着查看printf的源代码,但没有找到任何东西(不是100%肯定我看了正确的版本,但是......)。
我已经尝试使用谷歌搜索,但似乎谷歌扔掉任何#。而且我找不到任何浮动错误列表。
答案 0 :(得分:28)
它可以是负无穷大或NaN(不是数字)。由于字段上的格式,printf无法区分它们。
我在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
导致以下输出:
1.#J
-1.#J
-1.#J
删除.3格式说明符会给出:
1.#INF
-1.#INF
-1.#IND
所以很明显0/0给出NaN而-1/0给出负无穷大(NaN,-inf和+ inf是唯一的“错误”浮点数,如果我没记错的话)