2013-11-23 4 views
0

Я пытаюсь сделать расчет этой формулы,с использованием Math.log в Android

i = (495/(1.0324 - 0.19077 * (Math.log(76.2 - 25.4)) + 0.15456 * (Math.log(170.18))) - 450); 

Вместо того, чтобы дать правильный ответ, который 20,6, его показ неправильный ответ 9,59!

Тогда я обнаружил, что функция Math.log дает неверный результат! Как рассчитать такую ​​любопытную операцию в Android?

+2

Проблема не в 'Math.log'. Какое исходное выражение вы хотите рассчитать? –

+0

Как вы пришли к выводу, что проблема «Math.log» - проблема? (И какой номер вы хотите в качестве базы вашего логарифма? Это может быть проблемой.) –

ответ

8

Я думаю, что вы хотите использовать логарифм в base 10, тот, который вы используете возвращаете ближайшую двойная аппроксимацию по натуральных логарифма.

Так что ваше выражение должно быть:

i = (495/(1.0324 - 0.19077 * (Math.log10(76.2 - 25.4)) + 0.15456 * (Math.log10(170.18))) - 450); 

Выход:

20.630024173730078 
+0

Да, я даже пытался добавить много скобок, чтобы проверить его. log10 это правильный ответ \t \t i = ((495/(1.0324 - (0.19077 * (Math.log10 (76.2 - 25.4))) + (0.15456 * (Math.log10 (170.18))))) - 450) ; – Serafins

+0

ОК, что на самом деле работает, но не понял, почему я должен использовать log10? потому что в целом он должен работать без log10! @ZouZou –

+0

@ user3020796 Это математика, а не программирование. Результат, который вы хотите вычислить, должен использовать логарифм в базе 10. Даже если вы считаете, что когда вы делаете журнал (5), журнал находится в базе 10 в качестве базы по умолчанию, это не так в целом (вы принимаете естественный). Затем просто запрограммируйте это с помощью правильного метода API. –

2

Javadoc из Math.log: Возвращает натуральный логарифм (по основанию е) двойного значения.

Javadoc Math.log10: Возвращает логарифм базы 10 двойного значения.

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