Drukowanie bardzo dużych BigIntegerów
Próbuję rozwiązać następujący problem związany z BigIntegers w Javie 7 x64. Próbuję obliczyć liczbę do bardzo dużej mocy. Kod znajduje się poniżej, a następnie opis problemu.
import java.math.BigInteger;
public class main {
public static void main(String[] args) {
// Demo calculation; Desired calculation: BigInteger("4096").pow(800*600)
BigInteger images = new BigInteger("2").pow(15544);
System.out.println(
"The number of possible 16 bpc color 800x600 images is: "
+ images.toString());
}
}
Mam problemy z wydrukowaniem wyniku tej operacji. Po wykonaniu tego kodu drukuje komunikat, ale nie wartośćimages.toString()
.
Aby wyizolować problem, zacząłem obliczać moce dwóch zamiast żądanego obliczenia wymienionego w komentarzu do tej linii. Na dwóch systemach, na których to testowałem,2^15544
jest najmniejszym obliczeniem, które uruchamia problem;2^15543
działa w porządku.
Nie jestem blisko miejsca, w którym można uderzyć w limit pamięci w systemach hostów i nie wierzę, że jestem nawet zbliżony do limitu VM (w każdym razie działa z argumentami VM-Xmx1024M
-Xms1024M
nie działa).
Po szturmowaniu internetu w poszukiwaniu odpowiedzi przyszedłem podejrzewać, że osiągam limitBigInteger
lubString
związane z maksymalnym rozmiarem tablicy (Integer.MAX_VALUE
), których te typy używają do wewnętrznego przechowywania danych. Jeśli problem występujeString
Myślę, że byłoby możliwe przedłużenieBigInteger
i napisz metodę drukowania, która wypluwa kilka znaków naraz, aż do całegoBigInteger
jest wydrukowany, ale raczej podejrzewam, że problem leży gdzie indziej.
Dziękujemy za poświęcenie czasu na przeczytanie mojego pytania.