np.longdouble
Python コードで dtype を操作しようとしています。NumPy を使用して、Cython でコンパイルされた C モジュールから取得した long double を操作しようとしています。
私がこれをするとします:
import numpy as np
print np.finfo(np.longdouble)
Machine parameters for float128
---------------------------------------------------------------------
precision= 18 resolution= 1e-18
machep= -63 eps= 1.08420217249e-19
negep = -64 epsneg= 5.42101086243e-20
minexp=-16382 tiny= 3.36210314311e-4932
maxexp= 16384 max= 1.18973149536e+4932
nexp = 15 min= -max
---------------------------------------------------------------------
a = np.longdouble(1e+346)
a
Out[4]: inf
b = np.longdouble(1e+347)
b
Out[6]: inf
c = a/b
/usr/lib/python2.7/site-packages/spyderlib/widgets/externalshell/start_ipython_kernel.py:1:
RuntimeWarning: invalid value encountered in longdouble_scalars
# -*- coding: utf-8 -*-
c
Out[8]: nan
a.dtype, b.dtype, c.dtype
Out[9]: (dtype('float128'), dtype('float128'), dtype('float128'))
本質的に、それはこの質問と同じ問題にリンクされており、Python は最初1e+346
に をフロートに変換し、その表現はinf
. しかし、誰かが回避策を提案できますか? 最初に float に変換されない NumPy longdouble を作成する方法はありますか?
long double を出力できる C モジュールがあり、これを dtype の numpy 配列で使用したいと考えていますnp.longdouble
。
解決策に Python/NumPy の再コンパイルが含まれる場合でも、喜んで試します。