【发布时间】:2012-03-19 07:35:24
【问题描述】:
我正在尝试实现三角函数的范围缩减操作。但相反,我认为对传入数据执行模 pi/2 运算可能会更好。我想知道存在哪些算法并且对于 32 位 IEEE 754 浮点的此操作有效?
我必须在汇编中实现它,所以 fmod、除法、乘法等仅靠一条指令对我来说是不可用的。我的处理器使用 16 位字,我已经实现了 32 位浮点加法、减法、乘法、除法、平方根、余弦和正弦。我只需要范围缩小(模数)来输入余弦和正弦值。
【问题讨论】:
-
其实有很多聪明的算法,例如谷歌“payne hanek range reduction”,但我认为这不是你想要的
-
您在之前的相关问题中链接到的 Ng 的论文实际上解释了 Payne-Hanek 算法,AFAIK 仍然是精确范围缩小的最先进技术。您只需将其调整为单精度即可。
-
@Everyone,请删除/编辑您的答案,使其适用于我的实际问题。我正在寻找浮点模数内的算法。我需要实现 fmod 所做的事情并尽量减少我执行的除法次数。
-
谢谢 - fmod 实际上正是我正在寻找的(在另一个项目中)。
-
请注意:任何涉及浮点近似的模技术对于较大的数字都是毫无价值的。如果您将 pi 近似为 16 位,那么将 17 位数字除以您的近似值可能会产生大于 1 的误差,这意味着余数绝对可能在 0..pi 范围内的任何位置,而不会显示余数你真的在寻找。
标签: c assembly binary floating-point modulo