избегая отрицательных значений в C ++ - PullRequest
0 голосов
/ 17 октября 2011

У меня есть следующая функция, и я попытался избежать отрицательных значений, добавив оператор 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;
}

Ответы [ 3 ]

2 голосов
/ 17 октября 2011

Значение, которое вы получаете, не является отрицательным. 2.17691e-06 - экспоненциальное представление для 2.17691 x 1/1000000 = 0,00000217691. Взгляните на возведение в степень .

если вы не хотите показывать знак возведения в степень, рассмотрите возможность установки точности цифры перед показом / использованием g. Один из способов установить точность - здесь .

1 голос
/ 17 октября 2011

У вас правильная идея, но синтаксис немного отключен. Попробуйте это:

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 голосов
/ 17 октября 2011

Вы устанавливаете значение переменной не двойного типа при вызове этой функции? Вы получаете какие-либо предупреждения? Это должно дать вам подсказку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...