gpt4 book ai didi

c - while 循环导致函数在 c 中返回 0

转载 作者:行者123 更新时间:2023-12-02 02:15:27 25 4
gpt4 key购买 nike

我有以下 c 函数致力于实现拒绝采样器。 MersenneTwiser.h 生成 0 到 1 之间的随机数。我遇到的问题是 rnorm 函数。我正在使用 while 循环来拒绝一些样本。目前这是废话,因为它还没有完成。在当前形式中,程序返回 0.00000。

#include<stdio.h>
#include<math.h>
#include"MersenneTwister.h"
MTRand rng;

double p;
double prop;
int sign;


double dubexp(double theta){
p = rng.rand();

if ((p-0.5) > 0) sign= 1;
if ((p-0.5) < 0) sign= -1;

prop = -(1/theta)*sign*log(1-2*abs(p-0.5));
return(prop);
}


double u;
double theta;
double t;
double z;
double c;
double x;

double rnorm(double theta, double c){

t=rng.rand();
while (z == t)
{
x=dubexp(theta);
u=rng.rand();
z=x;

}
return z;
}

int main(){
theta=1;
c=1;

u = rnorm(theta,c);
printf("%f",u);
}

但是,如果我删除 while 循环,它会返回正确的 z 值。如下:

double rnorm(double theta, double c){

t=rng.rand();
x=dubexp(theta);
u=rng.rand();
z=x;


return z;
}

最佳答案

while 循环永远不会运行

double rnorm(double theta, double c){

t=rng.rand();
while (z == t) // <-- this condition is never true, so the loop doesn't run and the function just returns z
{
x=dubexp(theta);
u=rng.rand();
z=x;

}
return z;
}

请参阅上面的评论。

此外,z 是全局定义的。全局变量和静态变量被初始化为零。就是这个原因。

关于c - while 循环导致函数在 c 中返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67234221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com