函数不接受第一个返回值,跳回,计算另一个时间并返回“假”值[C ++]

当我调用calc()时,他没有给我x的第一个返回值,相反,他跳回了 double x = v1*sqrt((-(2.0*log(s)))/s);并第二次计算x并返回nan。

调试器向我显示,在他第一次尝试返回x之前,x的值为-0.525209。我以为那是可以接受的返回值(双精度)。

有人知道如何解决这个问题,或者为什么他跳回去? (对不起,我还是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;
}
carsty 回答:函数不接受第一个返回值,跳回,计算另一个时间并返回“假”值[C ++]

我想你想要这个:

#include <cmath>
#include <cstdlib>
#include <iostream>    

double calc(){
    for (;;) {
    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)
        continue;

    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;
}

这将选择新的随机值,直到s

本文链接:https://www.f2er.com/3137144.html

大家都在问