【发布时间】:2010-03-16 19:58:13
【问题描述】:
有没有一种快速取浮点数模数的方法?
对于整数,梅森素数有一些技巧,因此可以计算 y = x MOD 2^31-1 而无需除法。 integer trick
可以对浮点数应用任何类似的技巧吗?
最好以可以转换为向量/SIMD 操作或移动到 GPGPU 代码的方式进行。这排除了对浮点数据使用整数计算。
我感兴趣的素数是 2^7-1 和 2^31-1,但如果浮点数有更有效的素数,那将是受欢迎的。
此算法的一个预期用途是在输入浮点数被读入算法时计算它们的运行“校验和”。为了避免占用过多的计算能力,我想保持这种轻量级。
显然,类似的技术用于更大的数字,特别是 2^127 - 1。不幸的是,论文中的数学超出了我的能力,我无法弄清楚如何将其转换为更小的素数。Example of floating point MOD 2^127 - 1 - HASH127
【问题讨论】:
-
无需除法即可计算任何二次方的模数;你确定你问的是你打算问的问题吗?我相信您实际上是在寻找计算模块
2^7 - 1和2^31 - 1。 -
2^7 和 2^31 不是素数 - 你能更准确地重新表述你的问题吗?
-
您的目标是哪些指令集?
-
是的,x 和 y 中的值应该是整数。首先,我想在 Windows 上定位向量内在函数(那些有整数支持,但速度很慢)。最终我会转向 ATI 图形 (CTM API),它只有 16 位/32 位 FP。
标签: algorithm language-agnostic math floating-point simd