2012-03-27 6 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

내 생각 엔 당신이 음수의 세제곱근을 취하고 있다는 점이다.

... 그 가장 큰 원인을 보이지만, 코드 때문에 지역 변수로 모두 xX을 가지고 읽어 정말 하드 더 가까운 검사 후, 실제로 어느 시점에 x을 수정하지 않는 등, 들어오는 값인 x에 따라 달라집니다. 2보다 크거나 같은 유한 값이면 괜찮을 것입니다. 그러나 x이 2보다 작 으면 간단한 수학을 이유로 실패합니다. (잘 NaN을 반환합니다) ...

+0

을 반환합니다.이 코드를 다시 작성하려고합니다. 잠시만 기다려주십시오. – LuckSound

+0

흠 ... 숫자가 2보다 작 으면 어떻게 써야하나요? – LuckSound

+0

@ lis.sanLee : 코드 목적을 모르는 경우에는 말할 수 없습니다. –

1

Math.Pow은 주어진 힘에 대해 0보다 작은 숫자에 대해 정의되지 않습니다. 그래서 당신은 함수가 실패 할 것입니다.

x < 0 그러나 네가티브 인피니티가 아님; y는 정수, NegativeInfinity 또는 PositiveInfinity가 아닙니다.
결과 : NaN이

9

Math.Pow가 NaN 반환 할 때이 3 사례를 볼 수 있습니다

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

공공 정적 이중 탕 (더블 X 더블 y)를

1) x 또는 y = NaN.

2) x < 그러나 NegativeInfinity는 아니지만; 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.