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.
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:
You may also try this:
n = numpy.longdouble(1e300) * 1e9
Version 2 works now (numpy 1.19.1, machine: x86-64):
>>> np.longdouble('1e309')
1e+309
The other one doesn't.
>>> np.longdouble(1e309)
inf
This doesn't work because 1e309 is first interpreted by the python interpreter, which converts it into a 64 bit floating point number (because it doesn't know any better) and THEN send it to numpy. You have to give numpy the number in form of a string literal to give it a chance to process the number itself.
^ x86-64 means essentially any personal computer running Windows, MacOS or Linux. I believe it should work on all of them, because as far as i know x86-64 all have the x87 floating point unit that natively supports 80 bit floats.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.