我一直在研究如何计算正弦和余弦。我发现了一些“标准”方法,包括查找表,CORDIC算法和泰勒系列。我还发现大多数现代处理器都有汇编指令来计算三角函数。我想知道的是这些命令是如何工作的。
所以,我的问题是: 当前发电机使用什么特定算法来计算正弦和余弦?
答案 0 :(得分:2)
answer to a related, but different question here谈论FPU如何执行此类指令:
一旦你减少了论证,大多数芯片都使用CORDIC算法来计算正弦和余弦。你可能会听到人们说计算机使用泰勒系列。这听起来很合理,但事实并非如此。 CORDIC算法更适合高效的硬件实现。 (软件库可能使用Taylor系列,比如说不支持trig函数的硬件。)可能还有一些额外的处理,使用CORDIC算法得到相当好的答案,然后做其他事情以提高准确性。
虽然注意它说的是“大多数芯片”,因为尝试提高性能,准确性或(理想情况下)两者显然都是芯片制造商所追求的,因此,它们之间会有差异。
这些差异导致更高的性能,但代价是准确性降低,反之亦然(当然,由于我们生活在一个不完美的世界,它们可能只是两者都很糟糕)所以有时候一个人可能更喜欢在CPU中执行算法(如果您自己编码算法会发生这种情况),而不是像 fsin 那样在FPU中传递。
This archived blog post讨论了Sun在英特尔上实施JVM的方式是如何仅使用对某个范围的输入的fsin
的简单调用,因为该实现存在缺陷。与该文章相关的论文可能会更详细地讨论fsin
的实施及其问题,但您需要成为订阅者或付费才能阅读该文章(因此我没有这样做)。