14

最近,有时(很少)当我们从应用程序导出数据时,导出日志包含看起来像“-1.#J”的浮点值。我无法重现它,所以我不知道浮点数在二进制中的样子,或者 Visual Studio 如何显示它。

我尝试查看 printf 的源代码,但没有找到任何东西(虽然不是 100% 确定我查看了正确的版本......)。

我试过谷歌搜索,但谷歌似乎丢弃了任何#。而且我找不到任何浮动错误列表。

4

1 回答 1

29

它可以是负无穷大或 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 是唯一的“错误”浮点数)

于 2009-05-08T15:27:09.100 回答