Math.pow (-27.0,1.0 / 3) возвращает NaN - PullRequest
0 голосов
/ 03 октября 2018

Math.pow(-27.0, 1.0/3) должно быть эквивалентно cbrt(-27), которое возвращает , возвращает -3.Почему pow возвращает NaN?

Это не целочисленное деление и это не я, я не могу придумать причину, по которой это должно произойти.

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Не возвращает ошибку.Я настоятельно рекомендую вам прочитать правила , приведенные в Math.pow(double, double) Javadoc .Я помогу первый аргумент конечен и меньше нуля и второй аргумент конечен и не является целым числом, тогда результат равен NaN.

0 голосов
/ 03 октября 2018

Вы не можете рационально получить корень куба -27, потому что он отрицательный, что объясняет, почему math.pow возвращает NAN.Cbrt (-27) возвращает -3, потому что он работает немного по-другому: он принимает величину значения (в этом случае || -27 || = 27), вычисляет и затем повторно применяет отрицательное значение, давая вам -3.

0 голосов
/ 03 октября 2018

Согласно Oracle , один из особых случаев для метода Math.pow(double,double):

Если первый аргумент конечен и меньше нуля, а второй аргумент конечена не целое число, то результат равен NaN.

И Math.cbrt (double) работает, потому что:

Для положительного конечного x,cbrt (-x) == -cbrt (x);то есть корень куба отрицательного значения является отрицательным от корня куба величины этого значения

...