2010-12-01 40 views
1
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,因爲strig只有52位長。但是,我想要的平方根的小數部分的第一個64位2.2的平方根的小數部分的前64位

回答

4

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

64位分數的52位進行,然後指數

這就是爲什麼你的二進制字符串長只有52位。

延伸閱讀:http://en.wikipedia.org/wiki/Double_precision_floating-point_format

爲了得到前64位,你可以嘗試執行多精度操作的數學庫,讓你的結果。

別擔心。沒有-1對你的問題,這是合理的,但它表明你沒有研究你的功課:)(或者你在課堂上睡着了)。

再見。

0

嘗試BigDecimal - 它具有任意的計算精度。