GMP конвертировать mpz в mpf - PullRequest
3 голосов
/ 24 января 2010

Я использую GMP и хочу быстро конвертировать mpz в mpf. Я просмотрел библиотеку и не мог найти много. Лучшее, что я мог придумать, было это:

mpz_t x;
/* Insert code here that assigns some value to x */
char buf[SIZE];
gmp_sprintf(buf, "%Zd", x);
mpf_t y;
mpf_set_str(y, buf);

Это решение требует многократного преобразования в и из строки. Кроме того, оно ограничено SIZE, и я не вижу способа предопределить, насколько большим должен быть SIZE. Есть ли лучший способ сделать это преобразование?

Ответы [ 2 ]

6 голосов
/ 24 января 2010

Как насчет использования mpf_set_z (mpf_t rop, mpz_t op)?

Также (я полагаю, вы сделали это) ваши переменные mpz и mpf должны будут инициализироваться с mpf_init(mpf_t x) и mpz_init(mpz_t x).

Таквы бы сделали:

mpz_t x;
mpz_init(x);
/* Insert code here that assigns some value to x */
mpf_t y;
mpf_init(y);
mpf_set_z(y,x);
2 голосов
/ 24 января 2010

Ух ты, учитывая плохую репутацию sprintf Я удивлен, что они даже включили такую ​​функцию.

mpz_sizeinbase можно использовать, чтобы выяснить, сколько места вам понадобится для хранения целого числа в 10-значном представлении. И другой человек, который ответил правильно, mpf_set_z - это гораздо лучший способ, чем преобразование целого числа в строку со значением 10 и чтение его обратно в число с плавающей точкой.

...