代码之家  ›  专栏  ›  技术社区  ›  Srekel

浮点误差-1是什么意思?

  •  11
  • Srekel  · 技术社区  · 16 年前

    最近,有时(很少)当我们从应用程序中导出数据时,导出日志包含类似于“-1.j”的浮点值。我还不能复制它,所以我不知道二进制文件中的float是什么样子的,也不知道Visual Studio如何显示它。

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

    我试过谷歌搜索,但谷歌似乎把任何一个都扔掉了。我找不到任何浮动错误列表。

    1 回复  |  直到 12 年前
        1
  •  28
  •   Tobi    16 年前

    它可以是负无穷大,也可以是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是唯一“错误”的浮点数,如果我记得正确的话)