2016-08-10 3 views
-1

Я пытаюсь сделать следующий расчет в мой класс JavaMath.pow ограничение расчета на одну десятичную точку

Math.pow (0,0901/12 * (1 + 0,0901/12), 356.966667)

В результате я получаю 0.0. Однако ожидаемый результат: 0.10844

+0

Нет, математика говорит, что это 0, или, вероятно, что-то вроде 0,00000000000001 – AmazingDreams

+1

0.0901/12 * (1 + 0.0901/12) равно 0.0075647084027 (7). Если вы поднимете его до 357, вы получите невероятно небольшое число, ниже уровня точности двойника, поэтому вы получаете 0.0. – Dth

+0

Ваша база должна быть чем-то вроде ~ 0.993779, так что поднятый при этой мощности даст ваш ожидаемый ответ. – Slimu

ответ

2

Я не уверен, что ваш результат должен быть 0.10844. Базовый номер примерно такой ~ 0.00756, и вы поднимаете его до положительной мощности ~ 357. Это означает, что для такой большой мощности у вас будет больше нулей после десятичной точки. Это означает, что у вас будет положительное значение, меньшее, чем один двойной, и он будет округлен до 0.0.

Используя BigDecimal, вы получите следующее значение: ~ 7.08E-756 для вашего вычисления, а наименьшее положительное двойное значение (Double.MIN_VALUE) равно 4.9E-324. Это означает, что 0.0 будет вашим округленным значением.

+0

Я попытался отобразить его с помощью 'System.out.printf («%. 20f », Math.pow (...));' все равно не повезло. Я думаю, что ОП что-то где-то ошиблось. – progyammer

+0

Число, равное количеству нулей после десятичной точки, соответствует. – Slimu

+0

Ну, я не думаю, что 'float' или' double' поддерживают эти многие места ... [Wolfram] (https://www.wolframalpha.com/input/?i= ((0.0901 +% 2F + 12)) * (1% 2B (0.0901 +% 2F + 12))) +% 5E + 356.966667) – px06