# mpf_class to double

Andreas Puettmann andreas.puettmann at gmx.de
Sat Sep 4 09:21:01 CEST 2010

```  Hi everyone!

I am absolutely new to GMP, so please excuse me if my question is a
pushover.

I have a scientific simulation code which as a whole works fine (using
only C standard types, i.e. doubles). However, there is a small fragment
of it which somehow seems to produce "random" results. As this part
consists basically of a large sum (or difference) of doubles of
arbitrary magnitude, one can assume that this behavior is due to loss of
significance here. To substantiate this suspicion, my thought was to do
this summation with mpf_class data types at very high precision.

Reduced to its core, the code fragment looks similar to this:

void calc_sum (double *a, double *result, int l)
{
*result = 0.0;

for(int i=0; i<l; i++)
*result += a[i];
}

And what I would like to do is something like this (in some sort of
pseudo code):

void calc_sum (double *a, double *result, int l)
{
// convert input values to high precision types... in whatever way...
mpf_class mpa[l];
mpf_class mpresult = 0.0;

for(int i=0; i<l; i++)
mpa[i]= a[i];

// evaluate sum with mpf types
for(int i=0; i<l; i++)
mpresult += mpa[i];

// convert result back to double
*result = mpf_to_double( mpresult );
}

Right now this fails mainly because I don't know how to do the
back-conversion from mpf to double.

But I would also like to know if this approach is intelligent at all. Or
would there be a nicer/better way to do this?

Remember, I really do not want to convert the whole code to mpf types as
I am pretty sure that problems only originate from this fragment.

Any hints would be much appreciated!