2012-03-27 1 views
0
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?C# Math.pow (x, 0.333)

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

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; 
    } 
+0

Какие значения параметров вы использовали? (что такое 'x' и' zn'?) –

+0

Это происходит со всеми значениями параметров? –

+0

@HansKesting zn по умолчанию имеет значение 1, но пример x будет приятным. – Khan

ответ

11

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

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

+0

Я пытаюсь переписать этот код. Один момент, пожалуйста, – LuckSound

+0

hmm ... Как это записать, когда число меньше 2? – LuckSound

+0

@ lis.sanLee: Это невозможно сказать, когда мы не знаем цели вашего кода. –

1

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

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

9

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

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

общественности статической двойной Pow (двойной х, дважды у)

1) x или y = NaN.

2) x < 0 но не отрицательныйInfinity; y не является целым числом, NegativeInfinity или PositiveInfinity.

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

0

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

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