我只是想知道像正弦、余弦和sqrt这样的函数在cmath中是在哪里实现的,又是如何实现的。我知道math包括math.h,math.h有一堆东西,但是其中一些函数背后的实际“数学”在哪里?
编辑:我更感兴趣的是是否有与数学函数相关的有形源代码,或者这些头文件是我要去的最低层。
发布于 2011-01-13 13:23:38
这些操作的数学运算几乎肯定不是在C代码中完成的,至少对于x86架构来说是这样。它是在芯片上完成的。从integration of the 8087 math co-processor into the 486开始,x86家族就开始在芯片上执行正弦、余弦和平方根等运算。This page有一个很好的综述。
编辑:
刚在How does C compute sin() and other math functions?和How do Trigonometric functions work?找到了可能的复制品。
发布于 2011-01-13 13:16:01
这些函数可能只在头文件中声明,不管是<cmath>还是<math.h>。实现通常是在库函数中实现的,在进行真正的计算之前,这些函数必须处理各种奇怪的东西。关于实现一个好的数学库所涉及的一些问题的讨论,请参阅Plauger的一本有点过时但仍然很有趣的书,'The Standard C Library'。
发布于 2011-01-13 14:28:08
我曾经和你现在对同样的事情感兴趣,最后我找到了这些数学函数的C参考实现。这很棒,不仅因为代码的简单性,而且还因为丰富和完整的注释。我希望你和我一样喜欢它
这些算法可以从著名的网络库netlib中获得,其名称为“可自由分发的数学库”,fdlibm。
请先阅读e_sqrt.c。这就是你要的。
https://stackoverflow.com/questions/4677001
复制相似问题