2011-10-17 64 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 0 – 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

您是否在调用此函数时设置非双类型变量的值? 您是否收到任何警告?这应该给你一个线索。