我有以下功能,我试图通过包含if语句来避免负值,但它没有帮助。 ...关于如何解决这个问题的建议...
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 :(得分:2)
您获得的价值不是负数。 2.17691e-06是2.17691 x 1/1000000 = 0.00000217691的指数表示。 看看exponentiation。
如果您不想显示取幂符号,请考虑在显示/使用g之前设置数字的精度。 设置精度的方法之一是here。
答案 1 :(得分: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;
}
答案 2 :(得分:0)
调用此函数时是否设置了非double类型变量的值? 你收到任何警告吗?这应该给你一个线索。