最近,有时(很少)当我们从应用程序导出数据时,导出日志包含看起来像“-1.#J”的浮点值。我无法重现它,所以我不知道 float 在二进制中是什么样子,也不知道 Visual Studio 如何显示它。
我试着查看 printf 的源代码,但没有找到任何东西(虽然不能 100% 确定我查看的是正确的版本...)。
我试过使用谷歌搜索,但谷歌似乎会丢弃任何#。而且我找不到任何 float 错误列表。
最佳答案
它可以是负无穷大或 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 是唯一“错误的” float ,如果我没记错的话)
关于c++ - 浮点错误 -1.#J 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/840081/