2012-11-05 58 views
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)將該值放入合理值。但是,這似乎是一個很大的努力,我想有一個更好的方法。如何將兩個gmpz_t轉換爲mpq_t?

回答

2

爲什麼不通過mpq_set_z將每個轉換爲mpq_t,然後除以?

+0

這應該工作,沒有想到它。我會測試它,如果它按預期工作,我會接受你的答案。 –

+0

他們真的應該爲此提供一個專門的功能。 – rwst

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); 
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

相關問題