能否查看内置函数定义?

3

这只是出于好奇,我正在使用一个cmath函数,即cos,无论如何。 在查看cmath头文件后,我发现了这样的内容:

 inline _GLIBCXX_CONSTEXPR float
  acos(float __x)
  { return __builtin_acosf(__x); }

还有一个名为“__builtin__”的东西,我在谷歌上找不到任何相关资料。我对查看如何实现数学函数的源代码感兴趣,我想知道他们是如何使用泰勒级数等方法来解决问题的。这个源代码被隐藏以保护其专利权吗?还是可以找到的?


1
你需要深入研究编译器的源代码才能做到这一点。 - Mat
3
GCC是开源的,因此它并不隐藏,可能只是没有被Google索引。 - Richard Critten
1个回答

5

GCC的__builtin_函数并不是真正的函数,也就是说它们没有在任何地方声明和实现,而是由编译器检测并映射到某些实现。请参见builtins.hbuiltins.cbuiltins.def。很难追踪实际实现所在的位置,但似乎这些数学函数是从您正在使用的libc的实现中获取的。例如,在挖掘GLibc源代码时,可以找到至少两个__ieee754_acosf的实现(然后似乎被其他函数别名和包装),一个在C中e_acosf.c,另一个在x86汇编中a_acosf.S(备用链接,因为这些都是非官方的GitHub镜像e_acosf.c e_acosf.S)。你可以说可读性不是他们的首要任务。在musl libc源树中可以找到类似的代码:C中的acosf.c和x86中的acosf.s

有另一个答案(我本来想点赞的,但现在已经消失了),指出该实现最初来自于Netlibfdlibm,请参见e_acos.c,显然是来自Sun Microsystems。 - jdehesa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接