【发布时间】:2015-01-08 12:06:49
【问题描述】:
我需要一种(相当)快速的方法来为我的代码获取以下内容。 背景:我必须使用数字的幂及其乘积,所以我决定使用日志。 现在我需要一种将日志转换回整数的方法。
我不能只取 2^log_val(我正在使用 log base 2),因为答案会太大。事实上,我需要为给定的 M 给出答案 mod M。
我试过这样做。我将 log_val 写为 p+q,其中 q 是浮点数,q
这对我来说太长了,因为在最坏的情况下我会采取 O(p) 步骤。 有没有更好的办法?
【问题讨论】:
-
M 是固定的吗?根据您拥有的内存量和所需的精度,您可以将四舍五入的
2^q值存储在预先计算的表格中。 -
实际上没有,我有很多不同的 M。并且 q 是一个浮点数
-
浮点数仍然是 32 位值,所以它们可以用作查找表的索引。而且,根据所需的精度,您可以将
p+q存储为 64 位定点数,其中小数部分为 32 位,整数部分为 32 位。 -
更好的是,一旦你这样做了,你可以试试这里解释的right-to-left binary method。
-
您尝试解决的原始问题是什么?也许日志不是朝着正确方向迈出的一步。
标签: algorithm integer exponentiation