Tôi đang cố gắng tìm ra vấn đề sau liên quan đến BigIntegers trong Java 7 x64. Tôi đang cố tính một con số với một sức mạnh cực kì cao. Mã bên dưới, tiếp theo là mô tả sự cố.In các bản BigIntegers rất lớn
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());
}
}
Tôi đang gặp sự cố khi in kết quả của thao tác này. Khi mã này thực thi nó sẽ in ra thông điệp nhưng không phải là giá trị của images.toString()
.
Để cách ly sự cố, tôi bắt đầu tính toán lũy thừa của hai thay vì tính toán mong muốn được liệt kê trong nhận xét trên dòng đó. Trên hai hệ thống tôi đã thử nghiệm này, 2^15544
là phép tính nhỏ nhất kích hoạt vấn đề; 2^15543
hoạt động tốt.
Tôi không có nơi nào gần đạt giới hạn bộ nhớ trên hệ thống lưu trữ và tôi không tin rằng tôi thậm chí còn gần với giới hạn VM (ở bất kỳ tốc độ nào chạy với đối số VM -Xmx1024M
-Xms1024M
không có hiệu lực).
Sau khi lướt qua internet tìm kiếm câu trả lời tôi đã nghi ngờ rằng tôi đang đạt đến giới hạn trong số BigInteger
hoặc String
liên quan đến kích thước tối đa của mảng (Integer.MAX_VALUE
). Nếu vấn đề là ở String
Tôi nghĩ rằng nó có thể mở rộng BigInteger
và viết một phương pháp in mà spews ra một vài ký tự tại một thời gian cho đến khi toàn bộ BigInteger
được in, nhưng tôi khá nghi ngờ rằng vấn đề nằm ở nơi khác.
Cảm ơn bạn đã dành thời gian đọc câu hỏi của tôi.
Hmm, mã này hoạt động tốt cho tôi và cũng hoạt động tốt ở đây: http://ideone.com/EA0yl. –
Tôi nghĩ rằng vấn đề có thể là thiết bị đầu cuối của bạn. Thay vào đó, hãy thử in tệp đó vào tệp. –
Bạn có thể gỡ lỗi thời gian chạy. Sử dụng jdk - nó có nguồn –