如何在eglibc-2.13中实现sin()?

d33*_*tah 3 c linux math glibc libc

我需要追踪double sin(double x)eglibc-2.13中究竟是如何实现的.我下载了源代码,唯一有意义的部分是__sin函数,这是特定于平台的.它是我在/usr/lib/i386-linux-gnu/libm.a中所拥有的核心吗?

如何追踪从sin()到__sin()的宏定义?我真正需要的是确切的代码(文件名和行就足够了)以及构建过程推断使用哪种实现的方式.该架构的i386.

zwo*_*wol 5

(e)glibc构建过程是黑色,黑色魔法.你不想试图理解它.但是,glibc遵循每个公共函数的单文件编码风格,所以一般来说,如果你有源代码树并且想要找到某个函数的实现,那么最简单的事情就是

$ find * -name '*function*' -print
Run Code Online (Sandbox Code Playgroud)

当然,从顶层,替换function为功能的名称.

关于具体说到sin的数学函数都在的通用实现:math目录:然而,似乎有没有一般定义sin.所以接下来要看的是sysdeps.所有非通用的东西都在sysdeps,特别sysdeps/ieee754是所有数学函数都依赖于IEEE 754浮点规范,但没有其他系统依赖性.此目录按类型组织:sysdeps/ieee754/dbl-64包含IEEE的所有数学函数double.在这里你会发现sysdeps/ieee754/dbl-64/s_sin.c,这是你正在寻找的代码.(本e_,s_,k_,所使用意味着什么,但据我所知所有这些文件等前缀不再做.)

如果sin某个特定处理器的汇编语言有一个实现,那么它将位于一个名为sin.S(或可能s_sin.S)其他地方的文件中sysdeps.但是,似乎没有一个.