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

我试图寻找对printf的源代码,但没有发现任何东西(不是100%肯定我看着正确的版本,虽然...)。

我试着用搜索引擎谷歌,但扔掉任何#,它似乎。我找不到浮动错误的任何名单。

有帮助吗?

解决方案

它可以是负无穷大或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

除去0.3格式指定符给出:

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

所以很清楚0/0给出的NaN和-1/0给出负无穷大(NaN时,-inf和+ INF是唯一的“错误”的浮点数,如果我记错)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top