C # Math.pow (x, 0,333) - PullRequest
       41

C # Math.pow (x, 0,333)

0 голосов
/ 27 марта 2012
private double f(double x, double zn = 1)
    {
        double X = - zn;
        X *= x * x * (x + 1);
        X *= Math.Pow((x - 2), 0.333);
        return funct ? x : X;
    }

У меня есть этот код.Когда я пытаюсь найти Math.Pow ((x-2), 0.333) - у меня есть NaN.Как это решить?Почему NaN?

Переписано ...

private double f(double x, double zn = 1)
    {
        double answer = - zn;
        answer *= x * x * (x + 1);
        answer *= Math.Pow((x - 2), 0.333);
        return answer;
    }

Ответы [ 4 ]

11 голосов
/ 27 марта 2012

Я предполагаю, что вы берете кубический корень из отрицательного числа.Это кажется наиболее вероятной причиной, но ваш код действительно трудно читается из-за того, что x и X являются локальными переменными ...

После более тщательного изучения, когда выВы не изменяете x в любой момент, это действительно зависит от входного значения x.Если это конечное значение больше или равно 2, это должно быть хорошо.Но если x меньше 2, он потерпит неудачу (ну, вернет NaN) по причинам простой математики ...

9 голосов
/ 27 марта 2012

Вы можете видеть все 3 случая, когда Math.Pow возвращает NaN:

http://msdn.microsoft.com/en-us/library/system.math.pow.aspx

публичный статический двойной Pow (double x, double y)

1) х или у = NaN.

2) x <0, но не NegativeInfinity; y не является целым числом, NegativeInfinity или PositiveInfinity. </p>

3) х = -1; y = NegativeInfinity или PositiveInfinity.

1 голос
/ 27 марта 2012

Math.Pow не определено для чисел меньше 0 для данной мощности. Таким образом, ваша функция не будет работать в течение некоторого х.

x <0, но не NegativeInfinity; y не является целым числом, NegativeInfinity или PositiveInfinity. <br> Результат: NaN

0 голосов
/ 27 марта 2012

Если вы посмотрите здесь , это объясняет все ситуации, когда Math.Pow выдаст NaN.Я подозреваю, что этот случай может быть вашей проблемой:

x < 0 but not NegativeInfinity; y is not an integer, NegativeInfinity, or PositiveInfinity.
...