2013-04-05 64 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