2010-11-15 3 views
3

En raison des couches de normes, les fichiers d'inclusion pour C++ sont un nid de rats. J'essayais de comprendre ce que __isnan appelle réellement, et ne pouvait pas trouver n'importe où avec une définition réelle.Où est le code source d'isnan?

Je viens donc compilé avec S pour voir l'assemblée, et si j'écris:

#include <ieee754.h> 

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

    if (__isnan(x)) ... 
} 

Ces deux routines sont appelés. Je voudrais voir la définition actuelle, et éventuellement refactoriser des choses comme celle-ci, car il devrait s'agir juste d'une comparaison de bits, bien que cela soit difficile à réaliser quand la valeur est dans un registre à virgule flottante.

Quoi qu'il en soit, que ce soit ou non une bonne idée, la question est: WHERE est le code source __isnan(x)?

Répondre

3

Glibc a des versions du code dans le dossier sysdeps pour chacun des systèmes qu'il prend en charge. Celui que vous cherchez est en sysdeps/ieee754/dbl-64/s_isnan.c. Je l'ai trouvé avec git grep __isnan.

(Alors que les en-têtes C++ inclure du code pour les modèles, les fonctions de la bibliothèque C ne sera pas, et vous devez regarder à l'intérieur glibc ou tout autre.)

1

Here, pour la tête de maître de glibc, par exemple.

Questions connexes