【发布时间】:2017-11-10 18:56:48
【问题描述】:
问题是我们如何在没有浮点运算或长整数计算的情况下计算 floor(log2(5^x)) 的整数值?我正在寻找一种简单、高效且数学上优雅的方法。
观察: 公式就是5**x中的位数(加1)
尝试: 我试图将其简化为: 楼层(x*log2(5))
在我的用例中,x 不是很大,可能只有 1-100。虽然适用于小值的优雅公式就足够了,但我会对适用于任何 x 值的公式/算法感兴趣
我正在制作通用数字(类型 III)的参考软件实现。我想通过纯粹使用按位和基本操作使所有内容都可以轻松转换为微码。这是我需要简化的公式之一。
【问题讨论】:
-
5x 中的位数是上限(x*log2(5)),而不是下限。你需要 3 位来存储 51.
-
我认为是 floor(x*log2(5)) + 1。让我验证一下。编辑:是的,看起来我是对的。 f(2) = f(3) 在我们使用 floor 然后加 1 时有效,但对于 ceil 无效。
-
我认为你是对的。 4 需要 3 位来存储它。
-
对于有限大小的情况,您可以使用具有长整数算法的系统来计算表吗?对于 [1,N] 中的每个整数 n,计算 5 的最小整数幂 x,使得 2n 不大于 5x。存储 x 和 n 之间的映射。
-
是的,x
标签: math floating-point