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位。
答案 0 :(得分:4)
不幸的是,你忘记了一件重要的事情。
64位 double 由52位分数然后 exponent
组成这就是你的二进制字符串只有52位的原因。
进一步阅读:http://en.wikipedia.org/wiki/Double_precision_floating-point_format
为了获得前64位,您可以尝试执行多精度操作的Maths库并获得结果。
别担心。对你的问题没有-1,这是合理的,但它表明你没有学习你的作业:)(或者你在课堂上睡着了)。
再见。
答案 1 :(得分:0)
尝试BigDecimal - 它具有任意的计算精度。