gpt4 book ai didi

c++ - 如何使用GMP生成一定范围内的随机数

转载 作者:行者123 更新时间:2023-11-30 04:19:29 26 4
gpt4 key购买 nike

我尝试过如下操作:

int main(){
mpz_t v;
mpf_class u,w,x[3][200];

for(i=0;i<n;i++){
for(j=0;j<3;j++){
mpz_random(v,1000000);
mpf_div_ui(w.get_mpf_t(),v,1000000);
mpf_div(u.get_mpf_t(),1,2);
mpf_sub(w.get_mpf_t(),w.get_mpf_t(),u);
mpf_mul(x[i][j].get_mpf_t(),w.get_mpf_t(),2);
}
}
}

但是同时使用整数和 float 是行不通的。基本上尝试分配随机整数,除以整数的最大值可以给出一个介于 0 和 1 之间的数字(不一定是整数)。减去一半并乘以 2 给出一个介于 -1 和 1 之间的随机数,这就是我想要的,但是就像我说的那样,这会导致类型问题。

最佳答案

如果我正确理解了你的程序的意图,这应该或多或少是你所追求的。

int main(){
gmp_randstate_t state;
mpf_class v, w, x[3][200];

gmp_randinit_mt(state);
for(int i=0;i<3;i++){
for(int j=0;j<200;j++){
mpf_urandomb(v.get_mpf_t(), state, 4);
mpf_urandomb(w.get_mpf_t(), state, 256);
if (v < .5) w *= -1;
x[i][j] = w;
}
}
}

state 变量用于通知随机数例程您希望用于随机数生成器的算法。在上面的代码中,我已将其初始化为使用 Mersenne Twister 算法。

您没有正确声明您的 ij 索引。

第一次调用 mpf_urandomb() 得到一个介于 0 和 1 之间的 4 位随机值。它用于决定下一个数字是否应该为负数。

第二次调用 mpf_urandomb() 得到一个介于 0 和 1 之间的 256 位随机值。如果之前的数字小于 .5,则该值取反.

这个值赋给了x[i][j]

关于c++ - 如何使用GMP生成一定范围内的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15775679/

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