2010-12-01 2 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.первые 64 бита дробной части квадратного корня из 2

ответ

4

К сожалению, вы забыли одну важную вещь.

64-битный двойной производится 52 битами фракции, а затем показатель

Именно поэтому ваша двоичная строка имеет длину всего 52 бита.

Дальнейшее чтение: http://en.wikipedia.org/wiki/Double_precision_floating-point_format

Для того, чтобы получить первые 64 бита, вы можете попробовать математике библиотеку, которая выполняет несколько точных операций и получить результат.

Не волнуйся. Нет -1 на ваш вопрос, что разумно, но это показывает, что вы не изучали свою домашнюю работу :) (или вы спали во время занятия).

До свидания.

0

Попробуйте BigDecimal - он имеет произвольную точность для расчетов.

Смежные вопросы