2017-01-09 62 views
1

最近我試圖實現大數量的Karatsuba乘法。然後我嘗試將我的實現與Java BigInteger實現進行比較。我無法跟隨這行代碼:Java中的Karatsuba乘法實現BigDecimal

// result = p1 * 2^(32*2*half) + (p3 - p1 - p2) * 2^(32*half) + p2 
BigInteger result = p1.shiftLeft(32*half).add(p3.subtract(p1).subtract(p2)).shiftLeft(32*half).add(p2); 

據karatsuba算法,result = (p1 * 10^(2*half)) + ((p3 -p1 - p2) * 10^(half)) + (p2)

由於實現使用INT [],我相信32是Java整數位的數量。

但我不明白將位移到左邊的部分。你能幫我理解這裏發生了什麼嗎?

+0

@djxak你能告訴我應該看哪篇文章的哪一部分?看起來不相關。 –

+0

@djxak你說的是絕對的,完整的和完全的垃圾。這是一個關於'BigDecimal'中Karatsuba乘法的Java問題。它與Javascipt或全局錯誤處理完全沒有任何關係。 – EJP

+0

是不是上面的評論回答這個問題?左移是乘以2. – djxak

回答

0

Arithmetic shift

算術移位可以是有用的作爲有效的方法來通過二的冪執行帶符號的整數的乘法或除法。左移n有符號或無符號二進制數位具有將其乘以2^n的效果。在二進制補碼帶符號的二進制數字上右移n位的效果是將其除以2^n,但它總是向下舍入(朝向負無窮大)。