我在 C 中使用 GMP。是否可以将 mpz_t 设置为浮点值?
1513 次
1 回答
6
是的,有一个功能mpz_set_d
可以用于此目的:
void mpz_set_d (mpz_t rop, double op);
float 将由 C 本身升级为 double,然后 GMP 会将其转换mpz_t
为您的类型。
但是你应该知道这mpz_t
是一个整数类型,所以你可能会失去精度。如果您只是使用浮点数来保存大于您的long
类型的整数,那应该没问题。
如果您想处理实际的浮点值,您可能应该使用mpf_t
.
为了扩展,这里有一些示例代码和输出:
#include <stdio.h>
#include <values.h>
#include <gmp.h>
int main (void) {
float f = MAXFLOAT;
mpz_t num;
mpz_init_set_d (num, f);
printf ("Max float: %f\n", f);
printf ("As mpz_t : ");
mpz_out_str (stdout, 10, num);
putchar ('\n');
return 0;
}
注意使用组合mpz_init_set_d (num, f)
来简化代码。这相当于两个语句:
mpz_init (num);
mpz_set_d (num, f);
上面的程序输出:
Max float: 340282346638528859811704183484516925440.000000
As mpz_t : 340282346638528859811704183484516925440
于 2010-05-08T00:21:10.767 回答