1

我试图这样做如下:

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 之间的随机数,这是我想要的,但是就像我说的那样,这会因类型而导致问题。

4

1 回答 1

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 算法。

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

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

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

此值分配给x[i][j]

于 2013-04-03T00:38:04.957 回答