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

C++ 如何使用GMP生成一定范围内的随机数,c++,random,gmp,C++,Random,Gmp,我已尝试按以下方式进行: 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.ge

我已尝试按以下方式进行:

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);
   }
  }
}
intmain(){
mpz_电视;
强积金u,w,x类[3][200];;

对于(i=0;i如果我正确理解了您的程序的意图,这或多或少应该是您所追求的

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;
   }
  }
}
intmain(){
gmp_randstate_t state;
强积金(v,w,x类)[3][200];;
gmp_randinit_mt(州);

对于(int i=0),什么是“类型引起的问题”?您确切地讨论了吗?您可能需要考虑使用<代码> MPFUURANDOMB()/<代码>。通过先乘2,然后减去1可能更简单。@ USS31552对不起,我的意思是说,“从int到const的无效转换……”因为v是一个整数,所以不能在mpf函数中使用。@user315052我已经看过了mpf_urandomb()函数,它似乎是我想要的,只是我不知道“状态”是什么我的意思是,有人能解释一下吗。我可以问一下,你为什么选择这些精度?你不需要一个很大的精度来决定是否为负。我刚刚制定的大精度。使用对你有意义的任何东西。