这纯粹是好奇心,我正在使用 cmath 函数,即 cos 等。查看 cmath 标头后,我看到了这样的事情:
inline _GLIBCXX_CONSTEXPR float
acos(float __x)
{ return __builtin_acosf(__x); }
Run Code Online (Sandbox Code Playgroud)
还有“__builtin__”,我在谷歌上找不到任何来源。我有兴趣查看他们如何实现数学函数的源代码,我的意思是我猜他们使用泰勒之类的东西,但我想看看他们是如何做到的。它是由于专有原因而隐藏还是可以找到?
GCC__builtin_函数不是实际的函数,也就是说,它们并不是在任何地方真正声明和实现的,而是由编译器检测到并映射到某个实现。参见builtins.h、builtins.c和builtins.def。很难追踪实际实现所在的位置,但这些数学函数似乎取自您正在使用的libc的实现。例如,深入挖掘GLibc源代码,我们可以找到至少几种实现__ieee754_acosf(似乎是别名并被其他函数包装),一种是用 C 语言实现,另e_acosf.c一种是用 x86 汇编语言实现a_acosf.S(备份链接,因为这些是非官方的 GitHub 镜像))。你可以说可读性并不是他们的首要任务。您可以在musl libc源代码树中找到类似的代码:C 中的acosf.c和 x86 中的acosf.s。e_acosf.c e_acosf.S
| 归档时间: |
|
| 查看次数: |
677 次 |
| 最近记录: |