打印非常大的BigIntegers(Printing very big BigIntegers)

2019-06-25 17:02发布

我试图找出相关的Java 7中64 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^15544是触发问题的最小计算; 2^15543工作正常。

我没有在那里靠近打在主机系统上的内存限制,我不相信,我甚至接近极限VM(在任何速度与VM参数运行-Xmx1024M -Xms1024M没有效果)。

在互联网戳寻找答案我已经开始怀疑,我打在任何一个极限后BigIntegerString相关的数组(最大尺寸Integer.MAX_VALUE ),这些类型的使用内部数据存储。 如果问题是String我想这是可以延长BigInteger和写入,直到整个在一个时间里喷出几个字符的打印方法BigInteger被打印出来,但我宁愿怀疑问题出在其它地方。

感谢您百忙之中阅读我的问题的时间。

Answer 1:

问题是在Eclipse控制台视图中的错误。

在我的设置时,Eclipse(太阳神和朱诺)不能超过4095个字符没有CRLF显示一行更长的时间。 最大长度可根据您的字体选择不同 - 见下文。

因此,即使下面的代码将显示问题-没有必要为一个BigInteger

StringBuilder str = new StringBuilder();
for (int i = 0; i < 4096; i++) {
    str.append('?');
}
System.out.println(str);

这就是说,串在控制台实际印刷 - 例如你可以将它复制出来。 这是不显示。

作为一种变通方法,您可以设置Fixed width console在控制台中的首选项设置,该字符串将immediatelly出现:

基于Eclipse的Bugzilla对应的错误是:

  • 在控制台显示问题,当一个线到达4096个字符
  • 文本编辑不能显示有超过4095个字符的线路。 限制在4096个字符。
  • 长行不会被编辑器显示

根据这些,这是一个Windows / GTK的错误和Eclipse的开发人员不能做任何事情。

这个bug是有关文本的长度是像素,使用较小的字体,你就可以在文本,以获得更多的字符在断裂之前。



文章来源: Printing very big BigIntegers