2013-04-05 24 views
1

我正在研究一个问题具有自然对数尺度的程序。小数基数的整数对数

到目前为止,我使用的是base 2,并且在unsigned int log2(uint64_t)(在C/C++中),found here中有很好的实现。但是,我发现基数2对于我的问题来说太多了:我需要使用分数基,例如, 3/2。

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

我目前的解决方案是round(log(x)/log(base))其中回合返回整数,但我跳,至少,以避免对日志的两个评估。

回答

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