[Numpy-discussion] float128 / longdouble on PPC - is it broken?

Matthew Brett matthew.brett at gmail.com
Tue Oct 25 14:29:06 EDT 2011


Hi,

On Tue, Oct 25, 2011 at 11:14 AM, Pauli Virtanen <pav at iki.fi> wrote:
> 25.10.2011 19:45, Matthew Brett kirjoitti:
> [clip]
>>> or, in case the platform doesn't have powl:
>>>
>>>         long double x;
>>>         x = pow(2, 64);
>>>         x -= 1;
>>>         printf("%g %Lg\n", (double)x, x);
>>
>> Both the same as numpy:
>>
>> [mb312 at jerry ~]$ gcc test.c
>> test.c: In function 'main':
>> test.c:5: warning: incompatible implicit declaration of built-in function 'powl'
>> [mb312 at jerry ~]$ ./a.out
>> 1.84467e+19 3.68935e+19
>
> This result may indicate that it's the *printing* of long doubles that's
> broken. Note how the value cast as double prints the correct result,
> whereas the %Lg format code gives something wrong.

Ah - sorry - I see now what you were trying to do.

> Can you try to check this by doing something like:
>
> - do some set of calculations using np.longdouble in Numpy
>   (that requires the extra accuracy)
>
> - at the end, cast the result back to double

In [1]: import numpy as np

In [2]: res = np.longdouble(2)**64

In [6]: res / 2**32
Out[6]: 4294967296.0

In [7]: (res-1) / 2**32
Out[7]: 8589934591.9999999998

In [8]: np.float((res-1) / 2**32)
Out[8]: 4294967296.0

In [9]: np.float((res) / 2**32)
Out[9]: 4294967296.0

Thanks,

Matthew



More information about the NumPy-Discussion mailing list