Numpy longdouble арифметика, кажется, не в long double с преобразованием

Я играл в C99четверная точность длинный двойной Насколько я понимаю, (конкретная платформа) NumPy поддерживаетдлинный двойной и 128-битные поплавки.

Однако я столкнулся с чем-то, что не могу объяснить.

Дано:

>>> import numpy as np

Вычислите число, для которого потребуется более 64 бит, но менее 128 бит, чтобы представить его как целое число:

>>> 2**64+2
18446744073709551618          # note the '8' at the end
>>> int(2**64+2)
18446744073709551618          # same obviously

Если яподсчитывать то же самое число в C99 128 бит длиной, я получаю18446744073709551618.000000

Теперь, если я использую numpy long double:

>>> a=np.longdouble(2)
>>> b=np.longdouble(64)
>>> a**b+a
18446744073709551618.0              # all good...

Как насчет этих неправильных результатов:

>>> np.longdouble(2**64+2)
18446744073709551616.0             # Note '6'; appears 2**64 not done in long double
>>> np.longdouble(int(2**64+2))
18446744073709551616.0             # can't force the use of a Python long
>>> n=int(2**64+2)
>>> np.longdouble(n)
18446744073709551616.0
>>> np.longdouble(18446744073709551618)
18446744073709551616.0             # It really does not want to do '8' at the end

Но это работает:

>>> np.longdouble(2**64)+2
18446744073709551618.0

Вопрос: есть ли у numpy проблемы с правильным преобразованием значений в длинные двойные числа? Что-то я делаю неправильно?

Ответы на вопрос(2)

Ваш ответ на вопрос