我试过这样做:
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);
}
}
}
但是使用整数和浮点数不起作用。基本上尝试分配随机整数,除以最大值整数可以给出0到1之间的数字(不一定是整数)。减半并乘以2给出-1到1之间的随机数,这是我想要的,但是就像我说的那样,这会导致类型问题。
答案 0 :(得分:2)
如果我正确理解你的程序的意图,这应该或多或少是你所追求的。
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算法。
您没有正确声明i
和j
索引。
对mpf_urandomb()
的第一次调用得到0到1之间的4位随机值。它用于判断下一个数字是否应为负数。
对mpf_urandomb()
的第二次调用获得介于0和1之间的256位随机值。如果前一个数字小于.5
,则该值被否定。
此值已分配给x[i][j]
。