Math.pow()返回一個double值並且只接受int作爲參數... BigInteger因爲沒有用於查找BigInteger的函數^ BigInteger 通過循環做它需要很長時間... 有沒有更多的方式我失蹤?如何在java中找到類似2 ^(10^9)的數字的功率
日Thnx提前...
Math.pow()返回一個double值並且只接受int作爲參數... BigInteger因爲沒有用於查找BigInteger的函數^ BigInteger 通過循環做它需要很長時間... 有沒有更多的方式我失蹤?如何在java中找到類似2 ^(10^9)的數字的功率
日Thnx提前...
您可以使用BigInteger.pow()
採取一個大的指數。由於10 適合的int
,也是爲double
精確表示,你可以這樣做:
int exp = (int) Math.pow(10, 9);
BigInteger answer = BigInteger.valueOf(2).pow(exp);
這顯然打破了對指數比Integer.MAX_VALUE
大。但是,您可以使用BigInteger.modPow(BigInteger exponent, BigInteger m)
將BigInteger
作爲電源提升至另一個BigInteger
,第三個模塊爲BigInteger
。您只需要首先創建一個大於您的預期答案的BigInteger
作爲模數。
如果你有2^x,其中x是一個很大的數字,那麼你可以通過位移來做到這一點。示例:
2^4 == (1 << 4);
2^12 == (1 << 12);
使用BigIntegers,您可以使用shiftLeft()和shiftRight()方法做同樣的事情。
您可以使用pow,但左移可能會更快。
BigInteger bi = BigInteger.ONE.shiftLeft(1_000_000_000);
原因BigInteger.pow(BigInteger的)是不支持的可能是,即使是最簡單的例子,你需要比世界上任何電腦更多的內存來容納這樣的值。需要BigInteger指數的最小值是2^63和2 < < 2^63需要2^60個字節的內存或1萬億GB。
看看這個問題:http://stackoverflow.com/questions/4582277/biginteger-powbiginteger – micha
你可以看看exp(http://docs.oracle.com/javase/6/docs/api/ java/lang/Math.html#exp%28double%29) – Mike
有兩點需要注意:1.假設沒有開銷,您需要125MB(1Gb)的內存來存儲該數值。可能你在計算時需要更多。在做這個硬核數學之前,問問自己是否有必要。簡化並應用數學屬性/身份(例如,您可以輕鬆地計算出我給出的一行以上的1GB值) –