2013-11-02 1 views
0

Я понимаю, что двойной может быть недостаточно точным. Тем не менее, я не мог найти способ сделать это с помощью BigDecimal. Я пробовалКак проверить, не является ли число не в 50 десятичных знаков квадратного корня из двух?

while(Math.log10(Math.abs(a.subtract(new BigDecimal(1.41421356237309504880168872420969807856967187537694))) >= -50 || Math.log10(Math.abs(b.subtract(new BigDecimal(1.41421356237309504880168872420969807856967187537694)))) >= -50) 
{ 
    \\ stuff goes here 
} 

но он сказал, что я не могу использовать лог 10 или абсолютное значение для BigDecimals.

ответ

0
new BigDecimal(1.41421356237309504880168872420969807856967187537694) 

1.414... есть двойной буквальный, так что будет обрезан до двойной точности, прежде чем программа будет работать даже. Вам нужно будет передать его в виде строки:

new BigDecimal("1.41421356237309504880168872420969807856967187537694") 

Что касается сравнения, то вы должны быть в состоянии использовать что-то вдоль линий:

if(a.subtract(new BigDecimal("1.41421356237309504880168872420969807856967187537694")).abs().scaleByPowerOfTen(50).doubleValue() < 1 || ... 
Смежные вопросы