猿问

C如何计算sin()和其他数学函数?

C如何计算sin()和其他数学函数?

我一直在研究.NET反汇编和GCC源代码,但似乎在任何地方都找不到sin()和其他数学函数.。他们似乎总是在引用别的东西。

有人能帮我找到他们吗?我觉得C运行的所有硬件都不太可能支持硬件中的trig函数,所以必须有一个软件算法某地对吧?


我知道有几种方法起作用能,会,可以被计算,并编写了我自己的例程来计算函数使用泰勒级数为乐趣。我很好奇生产语言有多真实,因为我所有的实现总是慢几个数量级,尽管我认为我的算法相当聪明(显然它们不是)。


湖上湖
浏览 953回答 3
3回答

holdtom

正弦和余弦等功能是在微处理器内部的微码中实现的。例如,英特尔芯片为这些芯片提供了组装指令。C编译器将生成调用这些程序集指令的代码。(相比之下,Java编译器不会。Java在软件中而不是硬件上评估trig函数,因此它的运行速度要慢得多。)晶片不要使用泰勒级数计算三角函数,至少不是全部。首先他们用科迪奇但是,它们也可以使用一个简短的Taylor级数来改进CORDIC的结果,或者用于特殊情况,例如对于非常小的角度具有较高相对精度的计算正弦。
随时随地看视频慕课网APP
我要回答