Dov
Dov

Reputation: 8570

Where is the source code for isnan?

Because of the layers of standards, the include files for c++ are a rats nest. I was trying to figure out what __isnan actually calls, and couldn't find anywhere with an actual definition.

So I just compiled with -S to see the assembly, and if I write:

#include <ieee754.h>

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

  if (__isnan(x)) ...
}

Both of these routines are called. I would like to see the actual definition, and possibly refactor things like this to be inline, since it should be just a bit comparison, albeit one that is hard to achieve when the value is in a floating point register.

Anyway, whether or not it's a good idea, the question stands: WHERE is the source code for __isnan(x)?

Upvotes: 4

Views: 3184

Answers (2)

unwind
unwind

Reputation: 400009

Here, for the master head of glibc, for instance.

Upvotes: 2

Josh Lee
Josh Lee

Reputation: 177715

Glibc has versions of the code in the sysdeps folder for each of the systems it supports. The one you’re looking for is in sysdeps/ieee754/dbl-64/s_isnan.c. I found this with git grep __isnan.

(While C++ headers include code for templates, functions from the C library will not, and you have to look inside glibc or whichever.)

Upvotes: 4

Related Questions