gmp precision

When using the gmp library for high precision calculations, is it right that if I use mpf_set_d(...) to assign a double value to an mp float, the precision of other mp floats used together with this one is truncated to double precision, potentially losing information?

As a test I use this program:

1
2
3
4
5
6
7
8
9
10
11
12
	mpf_t x, y, z;
	mpf_init2(x, 1000000);
	mpf_init2(y, 1000000);
	mpf_init2(z, 1000000);
	mpf_set_str(x, "1e0", 10);
	mpf_set_d(y, 3.3124365842565);
	mpf_set_d(z, 3.3124365842566);
	mpf_mul(y, x, y);
	mpf_mul(z, x, z);
	mpf_sub(x, y, z);
	cout << setprecision(100) << x << endl;


(Notice the difference in the last digits of y and z), and get the output -9.9920...e-14. If I add even more digits to y and z I get output 0. Thus it seems that although I initialized the variables to 1000000 bits the precision is still around 15 digits.

(Also: according to the tutorial at http://gmplib.org/manual/ it should not be necessary to use init2 like this but only init, however to get high enough precision in other small test programs I have to use init2)
Last edited on
You should ask this in the GMP mailing list. You're more likely to get good replies.
Will do, thanks!
Topic archived. No new replies allowed.