如何将两个gmpz_t转换为mpq_t?

时间:2012-11-05 21:16:10

标签: c type-conversion gmp

我有两个整数(gmpz_t),我需要将它们表示为一个分数(一个是分子,另一个是分母)。我找到的唯一解决方案是使用char* mpz_get_str (char *str, int base, mpz_t op)将它们转换为char*,然后将它们连接到中间的“/”,然后使用int mpq_set_str (mpq_t rop, char *str, int base)将值放入理性值。但这似乎付出了很多努力,我想必须有更好的方法。

3 个答案:

答案 0 :(得分:2)

为什么不通过mpq_t将每个转换为mpq_set_z,然后除以?

答案 1 :(得分:0)

具体来说,如果你有mpz_t rn, rd(分子,分母),这将是我的解决方案:

mpq_t ratn, ratd, t;
mpq_init(ratn);
mpq_init(ratd);
mpq_set_z(ratn, rn);
mpq_set_z(ratd, rd);
mpq_init(t);
mpq_div(t, ratn, ratd);
mpq_clear(ratn);
mpq_clear(ratd);
...
do something with t
...
mpq_clear(t);

答案 2 :(得分:0)

the documentation开始,有一些函数mpq_set_nummpq_set_den可以让您分别设置一些mpz_t的分子和分母。更一般地,mpq_numref(分别为mpq_denref)可让您处理mpq_t的分子(分母),就好像它是mpz_t一样,所以你可以致电mpz_set(mpq_numref(q),z)。为安全起见,我会在事后致电mpq_canonicalize