Когда я вызываю calc (), он не возвращает мне первое возвращаемое значение для x, вместо этого он возвращается к double x = v1*sqrt((-(2.0*log(s)))/s);
, вычисляет x второй раз и возвращает nan.
Отладчик показываетя, прежде чем он попытается вернуть х в первый раз, что значение х -0,525209. Я думал, что это будет приемлемое возвращаемое значение (double).
Кто-нибудь знает, как решить эту проблему или почему он откатывается назад? (извините, я все еще новичок в C ++)
#include <cmath>
#include <cstdlib>
#include <iostream>
double calc(){
double u1 = static_cast <double> (rand()) / static_cast <double> (RAND_MAX);
double u2 = static_cast <double> (rand()) / static_cast <double> (RAND_MAX);
double v1 = (2.0*u1)-1.0;
double v2 = (2.0*u2)-1.0;
double s = pow(v1, 2.0)+pow(v2, 2.0);
if (s >= 1.0){
calc();
}
double x = v1*sqrt((-(2.0*log(s)))/s);
std::cout << "before return " << x << std::endl;
return x;
}
int main(){
double hilfe = calc();
std::cout << "my mumber "<< hilfe << std::endl;
}