Квадратный корень отрицательного числа

Квадратный корень отрицательного числа

Согласно документации, при конечном отрицательном основании и конечном нецелом показателе результат равен NaN. Это значит, что Math.Pow ведёт себя не совсем так, как стандартная математическая степень, и вам придётся самим обрабатывать случай отрицательного основания.


Почему так сделано? Думаю, потому, что дроби наподобие 1/3 нельзя представить точно значением типа double. Поскольку в случае чётного знаменателя результат получается комплексным, мы видим, что малая ошибка в показатели степени ведёт к большой ошибке в результате. Поэтому разумным было бы просто не пытаться подсчитать результат для таких вот случаев.


Хорошо, а как решать задачу по извлечению корня целой степени? Ну просто анализируйте знак.

int rootpower = 3; double value = -8;  int sign = Math.Sign(value); double absRoot = Math.Pow(Math.Abs(value), 1.0/rootpower);  if (rootpower % 2 == 0 && sign == -1) {     Complex root = Complex.ImaginaryOne * absRoot;     // результат комплексный, работайте с ним } else {     double root = sign * absRoot;     // результат действительный, работайте с ним } 



Источник: ru.stackoverflow.com


Добавить комментарий