【问题标题】:Where is the source code for isnan?isnan的源代码在哪里?
【发布时间】:2012-06-11 20:34:32
【问题描述】:

由于标准的层次,c++ 的包含文件是一个老鼠窝。我试图弄清楚 __isnan 实际调用的内容,但找不到任何具有实际定义的地方。

所以我只是用 -S 编译来查看程序集,如果我写:

#include <ieee754.h>

void f(double x) {
  if (__isinf(x) ...

  if (__isnan(x)) ...
}

这两个例程都被调用。我想看看实际的定义,并可能将这样的东西重构为内联,因为它应该只是一个比较,尽管当值在浮点寄存器中时很难实现。

无论如何,不​​管这是否是一个好主意,问题是:__isnan(x) 的源代码在哪里?

【问题讨论】:

    标签: gcc floating-point double


    【解决方案1】:

    Glibc 在其支持的每个系统的sysdeps 文件夹中都有代码版本。你要找的那个是sysdeps/ieee754/dbl-64/s_isnan.c。我用git grep __isnan 找到了这个。

    (虽然 C++ 头文件包含模板代码,但 C 库中的函数不包含,您必须查看 glibc 或其他任何内容。)

    【讨论】:

      【解决方案2】:

      Here,比如glibc的master head。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-07
        • 1970-01-01
        • 1970-01-01
        • 2016-11-21
        • 2011-04-20
        • 2023-03-21
        相关资源
        最近更新 更多