分数碱基的整数对数

时间:2013-04-05 13:06:59

标签: algorithm

我正在研究一个问题具有自然对数比例的程序。

到目前为止,我正在使用base 2,其中unsigned int log2(uint64_t)(在C / C ++中)的实现很好,found here

然而,我发现基础2对我的问题太过分了:我需要使用分数碱基,例如3/2。

有人知道这种操作的实现吗?

我当前的解决方案是round(log(x)/log(base)),其中round返回整数,但至少我跳了一下,以避免对日志进行两次评估。

1 个答案:

答案 0 :(得分:2)

log(base)是一个常量,所以只需要对它进行一次计算并采用它的倒数(将其转换为乘法而不是昂贵的除法)。

const float k = 1.0f / log(base); // init constant once

y = round(log(x) * k); // each evaluation only requires one log,
                       // one multiply and one round