我需要評估任何基數的對數,這對一些精度無關緊要。有沒有這樣的算法?我用Java編程,所以用Java代碼很好。對數算法
How to find a binary logarithm very fast? (O(1) at best)也許能夠回答我的問題,但我不明白。可以澄清嗎?
我需要評估任何基數的對數,這對一些精度無關緊要。有沒有這樣的算法?我用Java編程,所以用Java代碼很好。對數算法
How to find a binary logarithm very fast? (O(1) at best)也許能夠回答我的問題,但我不明白。可以澄清嗎?
使用該身份:
日誌 b(N)=登錄È(N)/日誌ë(B)
在哪裏log
可以是一個對數函數在任何基地,n
是數字和b
是基地。例如,在Java中,這將發現的256基2對數:
Math.log(256)/Math.log(2)
=> 8.0
Math.log()
使用基地e
,順便說一句。還有Math.log10()
,它使用基地10
。
該問題中提到的技巧利用數字在內存中的存儲方式。如果你不完全理解這些技巧,你最好依靠數學(或BigInteger/BigDecimal)的方法。無論如何,他們利用這樣一個事實,即數字在內部非常接近於他們在基數2中的表示。在Java中,您沒有聯盟,而是通過[Double.doubleToRawLongBits]獲得雙精度的原始位(http:// docs .oracle.com/JavaSE的/ 6 /文檔/ API /爪哇/郎/ Double.html#doubleToRawLongBits(雙))。 – ignis
BigInteger和BigDecimal不包含日誌方法。 – Justin
確切。對於整數使用計數循環中明顯的位移。 – vaxquis