2013-06-22 1 views
4

Math.pow(0.0, 0.0) в Java возвращает 1, что неверно. 0^0 не определено. Та же проблема существует и в калькуляторе windows (я использую Win7). Почему это?Math.pow (0.0, 0.0) возвращает 1; должны быть неопределенными или ошибочными?

Mathematica заявляет об этом как об ошибке, так и в моем научном калькуляторе Casio, почему бы не java или калькулятор Win ... Это ошибка?

ответ

5

Потому что это именно то, что Javadocs говорят, что это будет делать:

общественности статической двойной военнопленных (двойной а, двойной б)

Возвращает значение первого аргумента, возведенного в степень второго аргумента. Особые случаи:
* Если второй аргумент положительный или отрицательный, то результат равен 1,0.

5

Это ошибка?

Нет, ошибка является нарушением спецификации. В specification указывается:

Возвращает значение первого аргумента, поднятого на мощность второго аргумента. Особые случаи:

  • Если второй аргумент положительный или отрицательный, то результат равен 1,0.

Наконец, математически, some do define0^0 в 1. Фактически, Knuth says, что он имеет быть 1.

Число отображений от пустого набора до пустого набора - 0^0. Он имеет быть 1.

Его рассуждение заключается в следующем. Если у вас есть два набора: A и B, количество функций от A до B составляет |B|^|A|. Сколько функций существует из пустого набора в пустой набор? Ну, есть ровно одно. По этой логике 0^0должен быть 1.

1

Точное определение поведение функции дается в http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#pow(double,%20double)

Вы увидите здесь, что

public static double pow(double a, 
     double b) 
Returns the value of the first argument raised to the power of the second argument. Special cases: 
If the second argument is positive or negative zero, then the result is 1.0. 

Не ошибка - это дизайн ,

+0

Но почему бы не вернуться, скажем, NaN, например, при делении нуля на 0 (0.0/0.0). Было бы лучше и не приводило бы к ложным вычислениям, когда оно используется. Mathematica возвращает неопределенный, что также верно ... – user2512326

+0

Спросите людей, которые приняли это дизайнерское решение. Если вы говорите «что-то к нулевому энергопотреблению - это одно», то проблем нет ... – Floris

+0

Большое спасибо. У меня есть ваша мысль. Вот почему я задаю этот вопрос, речь идет об этом несовместимом дизайнерском решении. Было бы также странно и несовместимо, если 0.0/0.0 вернется 1. Спасибо в любом случае, я ценю ваш ответ и время, которое вы потратили! – user2512326

2

Java определяет его таким образом. Это все, что вы действительно можете сказать.

Однако, математически является неопределенное количество. Один из способов понять, почему это написать

х = 0^0

где я использовал^представлять возведение в степень. Логарифмируя,

лог х = 0 лог 0

Я сделал это, так как каждый математик принимает, что журнал-не определен, и поэтому следует, что лог-х и, следовательно, й не определены слишком. (Математически это называется сингулярностью, и математик скажет вам, что это одна из худших особенностей, с которыми вы можете столкнуться).

+2

Я математик, и это не одна из худших особенностей, с которыми вы можете столкнуться, просто предел :) –

+0

Независимо от того, является ли журнал «0» неопределенным, зависит от контекста. Если речь идет о логарифмах неотрицательных действительных чисел, «log 0 = -infinity» является общепринятым значением. –

+0

@ Даниэль Фишер, но какой тип бесконечности? Вот тогда все становится действительно интересным. – Bathsheba