2013-04-15 61 views
2

我需要將任意數字x的冪從2減小到0. 如果x = 6,所需總和爲2pow6 + 2pow5 + ..... 1。 雖然我總是可以使用Math.pow編寫一個算法以減少到0--這個函數在循環中似乎臭名昭着的性能。 希望如果有人能夠幫助實現相同的使用移位二元運算符 - 我聽說他們比pow更高效。java中的數學公式替代

+0

「這個功能似乎臭名昭着的性能明智的「 - 你測試過嗎?你可以合理預期什麼'x'的值,並且性能至關重要?你現在有什麼? – thegrinner

+2

這是一個幾何級數的總和,有一個公式可以做到這一點 – BlackJoker

+1

@thegrinner對於記錄來說,一個快速的微型基準測試顯示'pow(2,10)'比'1 << 10'慢了160倍。 – assylias

回答

10

2^N + 2 ^(N-1)+ 2 ^(N-2)+ ... + 2 + 1 =(2 ^(N + 1) - 1)= ((1 << (n+1)) - 1)

+2

愚蠢的me.Sometimes技術讓我們忘記數學也可能有解決方案! – IUnknown

+1

有史以來最聰明最漂亮的答案 – Khanser

+0

哇!乾淨有用! +1! – mustache1up

6

您不必計算它在一個循環,你正在試圖計算相當於

Math.pow(2, x+1) - 1 

更妙的是,你可以計算出它像torquestomp建議,這將是更快:

(1 << (x + 1)) - 1 
+0

'Math.pow'有兩個參數。你不是指'Math.pow(2,x + 1) - 1'嗎? –

+0

@KlasLindbäck確切地說,謝謝 – piokuc