余弦在浮点

Ver*_*ian 6 floating-point binary trigonometry

我试图在浮点中实现余弦和正弦函数(但我没有浮点硬件).

由于我的处理器没有浮点硬件,也没有指令,我已经实现了浮点乘法,除法,加法,减法和平方根的算法.所以这些是我可以用来实现余弦和正弦的工具.

我正在考虑在这个站点使用CORDIC方法 但是,我使用newton的方法实现了除法和平方根,所以我希望使用最有效的方法.

请不要告诉我只是去看一本书或"纸张存在",不要开玩笑.我正在寻找众所周知的快速有效算法的名称.

Ste*_*non 4

首先,根据您的准确性要求,这可能比您之前的问题要复杂得多。

现在您已被警告:您首先需要减少参数模 pi/2(或 2pi、或 pi、或 pi/4)以使输入处于可管理的范围内。这是微妙的部分。要对所涉及的问题进行深入讨论,请下载 KC Ng 的ARGUMENT REDUCTION FOR HUGE ARGUMENTS: Good to the Last Bit 的副本。(简单的谷歌搜索标题就会得到一个pdf)。它非常易读,并且很好地描述了为什么这是棘手的。

完成此操作后,您只需在零附近的小范围内逼近函数,这可以通过多项式逼近轻松完成。泰勒级数可以工作,尽管效率很低。截断的切比雪夫级数易于计算且相当高效;计算极小极大近似更好。这是简单的部分。

我过去已经完全按照描述实现了正弦和余弦,完全以整数形式(抱歉,没有公共来源)。使用手动调整的汇编,在“典型”处理器上大约 100 个周期的结果是完全合理的。我不知道你正在处理什么硬件(性能主要取决于你的硬件产生整数乘法的高部分的速度)。