Bor*_*ube 7 assembly trigonometry
我一直在研究如何计算正弦和余弦。我找到了一些“标准”方法,包括查找表、CORDIC 算法和泰勒级数。我还发现大多数现代处理器都有一个汇编指令来计算三角函数。我想知道的是这些命令是如何工作的。
所以,我的问题是:当前的处理器使用什么特定算法来计算正弦和余弦?
这里对一个相关但不同的问题的答案讨论了 FPU 如何执行此类指令:
一旦你减少了论点,大多数芯片都会使用 CORDIC 算法来计算正弦和余弦。您可能会听到人们说计算机使用泰勒级数。这听起来很有道理,但事实并非如此。CORDIC 算法更适合高效的硬件实现。(软件库可能会使用泰勒级数,例如在不支持三角函数的硬件上。)可能需要一些额外的处理,使用 CORDIC 算法来获得相当好的答案,然后执行其他操作来提高准确性。
请注意,尽管它说的是“大多数芯片”,因为尝试提高性能、准确性或(理想情况下)两者显然是芯片制造商努力的目标,因此它们之间会有差异。
这些差异我认为会导致性能提高,但准确性会降低,反之亦然(当然,它们可能在这两方面都很糟糕,因为我们生活在一个不完美的世界),所以有时人们可能会喜欢在 CPU 中执行算法(如果您自己编写算法就会发生这种情况),而不是像fsin那样在 FPU 中执行。
这篇存档的博客文章讨论了 Sun 在 Intel 上实现 JVM 如何仅使用fsin带有特定范围输入的简单调用,因为该实现中存在缺陷。该文章链接到的论文大概fsin更详细地讨论了 的实现及其问题,但您需要成为订阅者或付费才能阅读该文章(因此我没有这样做)。
| 归档时间: |
|
| 查看次数: |
3259 次 |
| 最近记录: |