这是纯粹的好奇心,我使用的是cmath函数,即cos,无论如何。 在查看了cmath标题后,我看到了这样的事情:
inline _GLIBCXX_CONSTEXPR float
acos(float __x)
{ return __builtin_acosf(__x); }
还有那个" __ builtin __"并且我没有找到谷歌的任何来源。 我有兴趣看到他们如何实现数学函数的源代码,我的意思是我猜他们使用泰勒和东西,但我想看看他们是如何做到的。它是出于专有原因隐藏还是可以找到?
答案 0 :(得分:3)
GCC __builtin_
functions不是实际的函数,也就是说,它们并没有真正声明和实现,而是由编译器检测并映射到某些实现。请参阅builtins.h
,builtins.c
和builtins.def
。追踪实际实现所在的位置相当困难,但似乎这些数学函数来自您正在使用的libc的实现。例如,通过挖掘GLibc源代码,可以找到至少几个__ieee754_acosf
的实现(其似乎是别名并由其他函数包装),一个在C e_acosf.c
中,一个在x86程序集a_acosf.S
(备份链接,因为这些是非官方的GitHub镜像e_acosf.c
e_acosf.S
)。你可以说可读性不是他们的首要任务。您可以在musl libc源代码树中找到类似的代码:{x 3}}位于x86中的acosf.c。