How to get a Python long double literal?

zell picture zell · Apr 8, 2016 · Viewed 7.4k times · Source

How to get a Python long double literal? I have tried with

numpy.longdouble(1e309)

and

numpy.longdouble("1e309")

but both of them just return inf. What would be the right way to do that?

[EDIT] An answer below says that long double is treated as double in some platform. It is not the case on my system. To show this, I have tried:

np.longdouble(2.0)**1029

on my system (Mac OS 10.11). It returns

5.7526180315594109047e+309

[EDIT2] As suggested, I just tried

 np.finfo(np.longdouble)

which gives

 finfo(resolution=1e-18, 
       min=-1.18973149536e+4932, 
       max=1.18973149536e+4932, 
       dtype=float128)

on my OS. For info, my numpy version is 1.10.1.

Answer

Roman Kh picture Roman Kh · Apr 8, 2016

On some platforms long double is essential the same as double. From numpy documentation:

NPY_LONGDOUBLE

The enumeration value for a platform-specific floating point type which is at least as large as NPY_DOUBLE, but larger on many platforms.

Sometimes long double is a 80-bit float (but not 128 bit, as many people would expect). You may check with:

numpy.finfo(numpy.longdouble)

Consider the following answers as well:

  1. https://stackoverflow.com/a/25481654/2370124
  2. https://stackoverflow.com/a/18537604/2370124

You may also try this:

n = numpy.longdouble(1e300) * 1e9