计算机如何计算正弦值?[关闭]


28

计算机如何计算正弦值?逻辑上,当我考虑它时,唯一明显的方法是将许多sin值放入内存中,而当需要“计算” sin值时,它只会从特定的内存地址中提取数据。(例如sin(x)会从包含sin(x)值的内存地址中提取数据)这似乎是唯一可行的方法。还是有一个可用于计算值的正弦的函数?我真的是想问一问计算机是如何在基本水平上计算犯罪的。是否有一种方法可以使用由更多“基本”运算组成的不同函数来近似正弦值,而ALU能够执行多个“基本”运算以近似正弦值,还是只是从内存中提取值?


10
谷歌“ CORDIC”。Google“泰勒系列”。您对记忆的想法还不清楚。
尤金(Eugene Sh)。

8
“内存”方法是一种常用的优化技术(名称为“查找表”)。但是不,最初计算机没有它。但是,如果您一直在徘徊于计算机的计算方式<placeholder>,则可以使用Google“ <placeholder>计算算法”。它的工作原理比在大多数情况下,要求对SE ..
尤金嘘。

5
除了CORDIC和Taylors,还要确保您还寻找结合非线性极小极大技术的切比雪夫。泰勒限定平均误差,而切比雪夫限定最大误差并以更快的速度闭合。需要Minimax是因为常量不是无限精确的,运算也不是。而且您需要利用对称性,例如疯狂!
2016年

3
您是否知道有可用于计算的罪一样存在于COS,日志,指数,PI,平方根等一系列
安迪又名

2
当然,您可以首先在计算机内存中包含内容-您认为计算机如何启动?初始值可以连接到电路中,内置到只读存储单元或ic的金属化层中,烧入保险丝,以捕获的电荷存储以及从磁盘,穿孔带或拨动开关中读取-适用于软件的任何方法原则上也对预计算表有用,并且实际上许多算法都需要各种常量。实际上,最好根据需求,技术甚至其他需求留下的资源来决定最佳选择。
克里斯·斯特拉顿

Answers:


30

通常,高分辨率sin(x)函数将使用CORDIC(Cordate旋转数字计算机)算法来实现,该算法可以通过仅使用移位和加/减以及小的查找表的少量迭代来实现。杰克·沃尔德(Jack Volder)的原始论文 《 CORDIC计算技术》是1959年写的。当在FPGA中用硬件实现时,它也能很好地工作(对于具有FPU的微控制器,在硬件FPU中将实现类似的算法)。

For lower resolution, for example to create synthesized sine wave for an inverter or motor VFD (Variable Frequency Drive), a lookup table (LUT) with or without interpolation works well. It's only necessary to store the values for one quadrant of the sine wave because of symmetry.

正如@Temlib指出的那样,现代FPU内部使用的算法使用范围缩小,然后使用Remez算法之类的方法进行评估,以限制最大绝对误差。在这篇英特尔论文中,可以找到更多关于浮点三角函数的形式验证


2
而是将CORDIC用于纯硬件固定功能转换(其首次历史应用)。对于具有FPU的计算机,多项式逼近更快,更适用,因为它们可以重用现有的算术运算符,而不是使用特殊的CORDIC移位加法运算器。
TEMLIB '16

1
@TEMLIB是的,这是正确的一点,我将其添加到答案中。最早的科学计算器也使用了CORDIC,例如HP-35。
Spehro Pefhany

据我所知,CORDIC是HP 9100A台式计算器中的第一个硬件实现。它有一个大约2平方呎的印刷电路卡,上面覆盖着二极管,可以用作存储CORDIC算法使用的参数的ROM。
热舔

@HotLicks-您可能是错误的,CORDIC是为在飞行导航计算机中使用而开发的,距HP 9100A差不多十年了。
克里斯·斯特拉顿

@ChrisStratton-我的立场是正确的。
2016年

14

Most computer trig libraries are based on polynomial approximations, which gives the best balance between speed an accuracy. For example, a dozen or so multiplication and add/subtract operations is enough to give full single-precision accuracy for sine and cosine.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.