isnan的源代码在哪里?

时间:2010-11-15 15:08:16

标签: gcc floating-point double

由于标准的层次,c ++的包含文件是一个老鼠巢。我试图找出__isnan实际调用的内容,并且找不到任何具有实际定义的内容。

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

#include <ieee754.h>

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

  if (__isnan(x)) ...
}

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

无论如何,无论是否一个好主意,问题都在于:__isnan(x)的源代码是什么?

2 个答案:

答案 0 :(得分:3)

Glibc在sysdeps文件夹中为其支持的每个系统提供了代码版本。您正在寻找的是sysdeps/ieee754/dbl-64/s_isnan.c。我发现这是git grep __isnan

(虽然C ++标题包含模板的代码,但C库中的函数不会,你必须查看glibc或其中任何一个。)

答案 1 :(得分:1)

例如,

Here,对于glibc的主人来说。