使用GMP的divison mpz_cdiv_q永远不会达到零

时间:2017-10-10 00:21:06

标签: c++ gmp

我正在学习GMP。所以,我决定写一个十进制到二进制作为第一个和the simplest problemhere。但是,我被卡住了。我真的不明白为什么我的代码不起作用(代码很脏,我知道):

1.   unsigned long int j=0;
2.   unsigned long int idx=0;
3.   unsigned long int p=2;
4.   unsigned long int m=1;
5.   unsigned long int ten=10;
6.   mpz_t decimal,quotient, binary,remainder,multiplicant,base,idx_10;

8.   mpz_inits(decimal,quotient,binary,remainder,multiplicant,base,idx_10,NULL);
9.   mpz_set_ui(base,p);
10.  mpz_set_ui(idx_10,m);

12.  while (mpz_cmp_ui(decimal,j)!=0) {
13.  mpz_mod(remainder,decimal,base); 
14.  mpz_mul(multiplicant,remainder,idx_10); 
15.  mpz_add(binary,binary,multiplicant); 
16.  mpz_cdiv_q(decimal,decimal,base);
17.  mpz_mul_ui(idx_10,idx_10,ten);
18.  }

我知道我不需要定义p和m,因为有接受无符号整数的替代mod和除法指令。但是,我认为这个问题是因为这些问题。经过几个小时的努力与代码,我注意到十进制永远不会变为零,这是奇怪的。 mpz_cdiv_q ' mpz_cdiv_q ' (第16行),但它必须变为零。它变为无穷大,十进制永远不会变为零。这是一个错误吗?

感谢任何帮助。

0 个答案:

没有答案