2

Matlab/C 如何生成正弦波,我的意思是它们是否存储每个角度的值?但如果他们这样做,那么需要存储无限的值。

4

3 回答 3

1

仅使用任何现代数字计算机上可用的基本算术运算符来计算角度正弦的例程有很多很多。CORDIC 算法就是其中之一,但仅是一个示例。我不知道 Matlab 对三角函数使用什么算法。

计算机不会简单地在存储的值表中查找三角函数的值,尽管当前使用的一些算法确实会在存储的表中查找临界值。这些表包含的内容是特定于算法的,可能不符合对三角表的天真期望。

请注意,这个问题已经在 SO 上被问过很多次,这个答案似乎是他们的选择。

于 2012-06-26T10:11:27.690 回答
0

不,他们通常不会。即使他们这样做了,不,没有“无限价值”。数字有限(真实)计算机不能很好地处理无限,但这同样适用于角度(正弦函数的输入)。您不能要求“每个”角度,因为角度本身必须以有限的位集表示。

我认为使用泰勒级数很常见,或者其他基于插值的解决方案。

此外,现代 CPU:s 具有计算正弦的指令,但这当然只是将它如何实现的问题推低了一个或三个级别。

有关更多详细信息,另请参阅这个非常相似的问题

于 2012-06-26T10:12:20.007 回答
0

在 90 年代之前,计算机会使用基本函数加、减、乘和除,以数值方式计算正弦函数和其他三角函数。计算它们的算法通常包含在基本编译器库中。在某些时候,可以添加一个称为浮点处理器 ( FPU ) 的可选硬件处理器。我对 FPU 的理解是它确实存储了三角函数的硬值。随着 FPU 的加入,计算三角函数的速度将显着提高。然而,自 90 年代以来,FPU 已与 CPU 捆绑在一起。

我似乎找不到任何关于 FPU 如何准确实现正弦和其他三角函数的明确描述,通常这是留给设计芯片的电气工程师的实现细节。然而,实际上只需要知道从 0 到 pi/2 的值。其他一切都可以从这些值轻松计算出来。

编辑:好的,这是 FPU 上使用的实现:CORDIC,我在这个答案中找到了。

于 2012-06-26T10:59:53.057 回答