2011-10-17 3 views
0

다음 함수가 있습니다. if 문을 포함하여 음수 값을 피하려고했지만 도움이되지 않았습니다. 은 ... 나는이 문제를 해결할 수있는 방법에 대한 제안 ...C++에서 음수 값을 피하십시오.

double G(double S, double X, double r, double div, double k, double T) 
{ 
    double g=0; 
    g=Phi(d1(S,X,r,div,k,T))/(exp(-div*T)*S*k*sqrt(T)); 
if((isnan)(g) || (isinf)(g) || (g<0)) g=0; 
    return g; 
} 
+1

무슨 말씀 이세요? 어떤 상황에서는 함수 G가 여전히 음수 값을 반환합니까? –

+0

예 실제로 반환해야하는 시나리오에서 2.17691e-06과 같은 값을 반환합니다. – itcplpl

+8

2.17691e-06은 음수가 아닙니다. 0.00000217691 –

답변

1

는 당신이 바로 그 아이디어를 가지고 있지만, 구문은 조금 꺼져 있습니다. 이것을보십시오 :

double G(double S, double X, double r, double div, double k, double T) 
{ 
    double g=0; 
    g=Phi(d1(S,X,r,div,k,T))/(exp(-div*T)*S*k*sqrt(T)); 
    if(isnan(g) || isinf(g) || (g<0)) g=0; 
    return g; 
} 
+0

는 그것을 바꿨다. 그러나 나는 같은 음의 가치를 아직도 얻는다. – itcplpl

+0

샘플 입력과 출력을 게시 할 수 있습니까? –

2

당신이 얻는 가치는 부정이 아닙니다. 2.17691e-06은 2.17691 x 1/1000000 = 0.00000217691의 지수 표현입니다. exponentiation을보십시오.

지수 기호를 표시하지 않으려면 표시/사용하기 전에 숫자의 정밀도를 설정하는 것이 좋습니다 g. 정밀도를 설정하는 방법 중 하나는 here입니다.

0

이 함수를 호출하는 동안 non-double 유형 변수의 값을 설정 하시겠습니까? 경고가 표시됩니까? 그것은 당신에게 단서를 제공해야합니다.

관련 문제