2

(Web に関するその他の関連する質問のほとんどは、C の longdouble と python の間の変換に関するものです。この質問は異なります。)

次のように Python で longdouble を正しく取得できない理由がわかりません。

In [72]: import numpy as np

In [73]: np.longdouble(1e3000)
Out[73]: inf

Python コンソールに 1e3000 が double ではなく longdouble であることを知らせる必要があるようです。どうやってやるの

4

2 に答える 2

6

問題は、 のような式を使用すること...(1e3000)で、Python パーサーが最初に括弧内を計算し、その結果を関数呼び出しに渡さなければならないことです。long double はネイティブ型ではないため、括弧内の値はinf- であり、longdouble コンストラクターに渡されます。文字列バージョンが失敗するという事実は、おそらく NumPy のバグと見なすことができます。これは、おそらく通常の Python float コンストラクターを使用して、内部で文字列が Python float (C では「float64」または「double」) に変換されることを示しています。

回避策は、Python float と互換性のある値で long double オブジェクトを最初に構築し、それらを乗算して目的の値を取得することです。複数の値でそれを行う必要がある場合は、単一の値ではなく NumPy 配列を使用します。

>>> x = np.longdouble(10)
>>> x
10.0
>>> x **= 3000
>>> x
9.9999999999999999999e+2999
于 2015-05-24T02:58:15.763 に答える
1

Python には「長い double」がありません。科学表記法を使用することで、フロート リテラルを作成しています。これらは 1e3000 を表すことができないため、inf を取得します。整数を使用すると、必要なことを実行できる可能性があります: 10**3000.

于 2015-05-24T02:43:28.397 に答える