Geometry 如何计算具有二进制角度的正弦?

Geometry 如何计算具有二进制角度的正弦?,geometry,binary-data,trigonometry,Geometry,Binary Data,Trigonometry,三角学如何处理二元角 假设我的360°或2pi角度从0变为给定无符号整数类型的最大值,如何使用此表示计算sin和所有其他函数 什么是通用算法 编辑 我的重点是删除任何浮点计算或浮点类型,我只想用无符号整数实现这一点。我假设无符号类型上升到UINT\u MAX,您的意思是360°代表2的幂UINTMAX+1 在这种情况下非常简单:使用标准ish三角函数sinpi(),当应用于x时,该函数计算sin(πx) 32位无符号int的一个示例: sinpi((double)n * 0x1.0p-31)

三角学如何处理二元角

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

什么是通用算法


编辑


我的重点是删除任何浮点计算或浮点类型,我只想用无符号整数实现这一点。

我假设无符号类型上升到
UINT\u MAX
,您的意思是360°代表2的幂
UINTMAX+1

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

32位
无符号int
的一个示例:

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

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

我曾经基于一个算法实现过这个。对于二进制角度,该算法非常简单

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


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

问题不是clear@MBo哪个部分不清楚?你说的“二元角”是什么意思?整数的哪个值必须与2Pi匹配?sin(ipicoff)等怎么了?@MBo二进制角度是二进制角度。没什么错,但我知道的所有正弦实现都使用浮点计算,我尝试用无符号整数实现。你能把算法再扩展一点吗?可以用无符号整数来表示一切吗?这就是我想做的。例如,只需使用
uint32\u t
进行角度和任何相关操作。@user2485710哦,您正在询问如何实现自己的正弦函数。你的问题没有说清楚。好消息是,有了你的选择,争论的减少会很容易。甚至可以将实现π/2附近正弦的问题替换为实现0附近余弦的问题。坏消息是,你的问题仍然缺乏许多必要的信息,这些信息可能会引导你做出有用的回答。你想要什么样的准确度?您是否已经在使用某种系统来帮助您进行定点计算,或者您希望我们为您解决这个问题@用户2485710当我说“有你的选择”时,我的意思是“有我在回答中决定假设的可能选择”,当然。您的问题实际上并没有说要将UINTMAX+1用于360°。@user2485710最后,您是否希望结果也是一个整数?如何缩放?为了达到最终精度,中间结果应假定哪些整数宽度可用?如果你不理解这些问题,这意味着正确的解决方案是调用
sin()
sinpi()
。我的重点是将其保留在无符号整数域中,因此是的,我希望所有内容都是“整数”,它应该是弧度和圆周率的新表示形式。对于宽度,我会选择32位和/或64位宽的整数,当然我还需要测试这个,所以在创建我的全新正弦之后,我可以告诉你更多关于我的偏好,因为现在我可以接受一个收敛非常快的解决方案,我的重点是开始用无符号整数来完成这个符号。