我正在尝试找出与Java 7 x64中的BigIntegers相关的以下问题。我试图计算一个极高功率的数字。代码如下,然后是问题描述。
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());
}
}
我遇到打印此操作结果的问题。执行此代码时,它会打印消息,但不会打印images.toString()
的值。
为了隔离问题,我开始计算2的幂,而不是在该行的注释中列出的所需计算。在我测试过的两个系统上,2^15544
是触发问题的最小计算; 2^15543
工作正常。
我没有接近达到主机系统的内存限制,我不相信我甚至接近VM限制(无论如何使用VM参数运行-Xmx1024M
{{1没有效果)。
在互联网上寻找答案后,我开始怀疑我在-Xms1024M
或BigInteger
与数组最大大小(String
)相关的限制这些类型用于内部数据存储。如果问题在Integer.MAX_VALUE
,我认为可以扩展String
并编写一个打印方法,一次喷出几个字符,直到整个BigInteger
被打印出来,但我而是怀疑问题出在其他地方。
感谢您抽出宝贵时间阅读我的问题。
答案 0 :(得分:12)
问题是Eclipse中的Console视图的错误。
在我的设置中,Eclipse(Helios和Juno)在没有CRLF的情况下不能显示超过4095个字符的单行。最大长度可能因字体选择而异 - 请参阅下文。
因此,即使以下代码也会显示问题 - 不需要BigInteger
。
StringBuilder str = new StringBuilder();
for (int i = 0; i < 4096; i++) {
str.append('?');
}
System.out.println(str);
也就是说,字符串实际上是在控制台中打印的 - 你可以将其复制出来。它只是没有显示。
作为解决方法,您可以在控制台偏好设置中设置Fixed width console
设置,字符串将立即显示:
Eclipse的bugzilla上的相应错误是:
根据这些,这是一个Windows / GTK错误,Eclipse的开发人员无法做任何事情。
该bug与文本的长度有关,是像素,使用较小 字体,您将能够在它之前的文本中获得更多字符 符。