我正在研究一个问题具有自然对数比例的程序。
到目前为止,我正在使用base 2,其中unsigned int log2(uint64_t)
(在C / C ++中)的实现很好,found here。
然而,我发现基础2对我的问题太过分了:我需要使用分数碱基,例如3/2。
有人知道这种操作的实现吗?
我当前的解决方案是round(log(x)/log(base))
,其中round返回整数,但至少我跳了一下,以避免对日志进行两次评估。
答案 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