2的平方根的小数部分的前64位

时间:2010-12-01 12:27:51

标签: java

 double i=Math.sqrt(2);
 double fpart=i-(long)i;

 String s=String.valueOf(fpart);
 s=s.substring(2, s.length()-1);

 Long b=Long.parseLong(s);
 System.out.println(Long.toBinaryString(b));

 System.out.println(Long.toBinaryString(b).substring(0, 63));

我收到StringIndexOutOfBoundsException,因为字符串只有52位长。但是,我想要2的平方根的小数部分的前64位。

2 个答案:

答案 0 :(得分:4)

不幸的是,你忘记了一件重要的事情。

64位 double 由52位分数然后 exponent

组成

这就是你的二进制字符串只有52位的原因。

进一步阅读:http://en.wikipedia.org/wiki/Double_precision_floating-point_format

为了获得前64位,您可以尝试执行多精度操作的Maths库并获得结果。

别担心。对你的问题没有-1,这是合理的,但它表明你没有学习你的作业:)(或者你在课堂上睡着了)。

再见。

答案 1 :(得分:0)

尝试BigDecimal - 它具有任意的计算精度。