我有两个整数(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)
将值放入有理数。但这似乎需要付出很多努力,我想一定有更好的方法。
问问题
214 次
3 回答
2
为什么不将每个转换为mpq_t
via mpq_set_z
,然后划分?
于 2012-11-05T21:20:32.847 回答
0
从文档mpq_set_num
中,有一些函数mpq_set_den
允许您从一些函数中单独设置分子和分母mpz_t
。更一般地说,mpq_numref
(resp. mpq_denref
) 让您可以处理 an 的分子(分别是分母),mpq_t
就好像它是 an 一样mpz_t
,因此您可以调用mpz_set(mpq_numref(q),z)
. 为了安全起见,我会在mpq_canonicalize
之后打电话。
于 2015-11-23T08:19:42.873 回答
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);
于 2015-11-23T07:47:52.017 回答