2
我有一個程序,它將字符串中的數字讀入到mpz_t中,然後將其轉換爲mpf_t。儘管從文件中正確讀取,但我將它們轉換爲mpf_t時會出現精度損失。代碼如下:使用GMP精確丟失
#include <gmp.h>
#include <stdlib.h>
#include <stdio.h>
int main (int argc, char **argv) {
char* str = "632512364206354367378453";
mpz_t x;
mpz_init_set_str(x, str, 10);
mpf_t a;
mpf_init(a);
mpf_set_z(a, x);
gmp_printf("mpz_t: %Zd\n", x);
gmp_printf("mpf_t: %Ff\n", a);
}
這個例子的輸出是:
mpz_t: 632512364206354367378453
mpf_t: 632512364206354367378000.000000
正如你所看到的最後3個位數是不正確的。我怎樣才能避免這種情況?是否有任何其他功能來執行此轉換?
由於
是否有任何函數可以從mpz_t中獲取精度,然後我可以使用它來初始化mpf_t? – fc67 2015-02-24 21:26:41
@ fc67'mpz_sizeinbase'可以提供幫助。 – 2015-02-24 22:08:42