Math.pow(-27.0, 1.0/3) должно быть эквивалентно cbrt(-27), которое возвращает , возвращает -3.Почему pow возвращает NaN?
Math.pow(-27.0, 1.0/3)
cbrt(-27)
pow
NaN
Это не целочисленное деление и это не я, я не могу придумать причину, по которой это должно произойти.
Не возвращает ошибку.Я настоятельно рекомендую вам прочитать правила , приведенные в Math.pow(double, double) Javadoc .Я помогу первый аргумент конечен и меньше нуля и второй аргумент конечен и не является целым числом, тогда результат равен NaN.
Math.pow(double, double)
Вы не можете рационально получить корень куба -27, потому что он отрицательный, что объясняет, почему math.pow возвращает NAN.Cbrt (-27) возвращает -3, потому что он работает немного по-другому: он принимает величину значения (в этом случае || -27 || = 27), вычисляет и затем повторно применяет отрицательное значение, давая вам -3.
Согласно Oracle , один из особых случаев для метода Math.pow(double,double):
Math.pow(double,double)
Если первый аргумент конечен и меньше нуля, а второй аргумент конечена не целое число, то результат равен NaN.
И Math.cbrt (double) работает, потому что:
Для положительного конечного x,cbrt (-x) == -cbrt (x);то есть корень куба отрицательного значения является отрицательным от корня куба величины этого значения