如何用二进制角计算正弦?

时间:2014-05-20 08:22:17

标签: geometry trigonometry binary-data sine

三角法如何使用二进制角度?

假设我的360°或2pi角度从0变为给定无符号整数类型的最大值,如何用这种表示来计算sin和所有其他函数?

什么是通用算法?


修改

我的观点是删除任何浮点计算或浮点类型,我想用无符号整数来实现它。

2 个答案:

答案 0 :(得分:1)

我将假设你的无符号类型最多为UINT_MAX,你的意思是360°代表两个UINTMAX + 1的力量。

在这种情况下,它非常简单:使用标准三角函数sinpi(),当应用于x时,计算sin(πx)。

32位unsigned int的一个例子:

sinpi((double)n * 0x1.0p-31)

请注意,转换为double和乘法都是精确的,这意味着最终结果与sinpi()一样准确。您可以在CRlibm内找到最准确的双精度sinpi

答案 1 :(得分:1)

我曾经基于CORDIC算法实现了这一点。对于二进制角度,算法很简单。

让n位二进制角和向量[cos(x),sin(x)]初始化为x = 0.对于每个位,从MSB到LSB,只需应用{{3的一部分的旋转(或pi)。旋转矩阵可以预先计算。该算法最多花费4次加法和2次乘法,乘以二进制角度设置的位数。

然而!真正的问题是,你如何表示你的sin(x)和cos(x)的结果值。它们可以是固定点或浮点数......主要问题是有效地实现它们的加法和乘法。