1

我有两个整数(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)将值放入有理数。但这似乎需要付出很多努力,我想一定有更好的方法。

4

3 回答 3

2

为什么不将每个转换为mpq_tvia 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 回答