Кубический корень из отрицательного числа - PullRequest
9 голосов
/ 28 ноября 2011

Я пытаюсь найти корень куба отрицательного числа, но я получаю NaN.Любая помощь?

System.out.println(Math.pow(-8, 1.0 / 3.0));

Ответы [ 4 ]

14 голосов
/ 28 ноября 2011

Документация Java для Math.pow гласит:

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

Вы можете использовать Math.cbrt, чтобы получить корень куба:

double result = Math.cbrt(-8.0);
7 голосов
/ 28 ноября 2011

Помните, что математически есть 3 кубических корня. Предполагая, что вам нужен настоящий корень, вы должны сделать это:

x = 8;  //  Your value

if (x > 0)
    System.out.println(Math.pow(x, 1.0 / 3.0));
else
    System.out.println(-Math.pow(-x, 1.0 / 3.0));

РЕДАКТИРОВАТЬ: Как упоминалось в других ответах, есть Math.cbrt(x). (который я не знал, существовал)

Причина, по которой pow возвращает NaN с отрицательным основанием и неинтегральной степенью, заключается в том, что питание обычно осуществляется по величине угла в комплексной плоскости.

  • Для положительных действительных чисел угол равен нулю, поэтому ответ все равно будет положительным и реальным.
  • Для отрицательных действительных чисел угол равен 180 градусам, которые (после умножения на нецелую степень) всегда будут давать комплексное число - отсюда NaN.
3 голосов
/ 28 ноября 2011
1 голос
/ 28 ноября 2011

С http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html:

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

  • , если второй аргумент является конечным четным целым числом, результат равен результату возведения абсолютного значения первого аргумента в степень второго аргумента
  • , если второй аргумент является конечным нечетным целым числом, результат равен отрицательному результатувозведения абсолютного значения первого аргумента в степень второго аргумента
  • , если второй аргумент конечен, а не целое число, то результатом является NaN.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...