我有两个整数(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)
将值放入理性值。但这似乎付出了很多努力,我想必须有更好的方法。
答案 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_num
和mpq_set_den
可以让您分别设置一些mpz_t
的分子和分母。更一般地,mpq_numref
(分别为mpq_denref
)可让您处理mpq_t
的分子(分母),就好像它是mpz_t
一样,所以你可以致电mpz_set(mpq_numref(q),z)
。为安全起见,我会在事后致电mpq_canonicalize
。