web-dev-qa-db-ja.com

Pythonの倍精度浮動小数点値?

Floatよりも精度の高いデータ型はありますか?

72
kravemir

10進データ型

  • ハードウェアベースのバイナリ浮動小数点とは異なり、decimalモジュールには、ユーザーが変更可能な精度(デフォルトでは28桁)があり、特定の問題に必要な大きさにすることができます。

パフォーマンスの問題に追われている場合は、 GMPY をご覧ください

46
Jacob

Pythonの組み込みfloat型には倍精度があります(CPythonではC double、JythonではJava doubleです)。さらに精度が必要な場合は、 NumPy を取得し、そのnumpy.float128を使用します。

101
Fred Foo

10進数が必要な場合があります

>>> from decimal import Decimal    
>>> Decimal(2.675)
Decimal('2.67499999999999982236431605997495353221893310546875')

浮動小数点演算

12
jerboa

一部のアプリケーションでは、浮動小数点数の代わりに Fraction を使用できます。

>>> from fractions import Fraction
>>> Fraction(1, 3**54)
Fraction(1, 58149737003040059690390169)

(他のアプリケーションの場合、他の応答で提案されているように、 decimal があります。)

12
Gareth Rees

これが私の解決策です。最初にrandom.uniformを使用して乱数を作成し、倍精度で文字列にフォーマットしてから、浮動小数点数に変換し直します。 「.2f」を「.3f」などに変更することにより、精度を調整できます。

import random
from decimal import Decimal

GndSpeedHigh = float(format(Decimal(random.uniform(5, 25)), '.2f'))
GndSpeedLow = float(format(Decimal(random.uniform(2, GndSpeedHigh)), '.2f'))
GndSpeedMean = float(Decimal(format(GndSpeedHigh + GndSpeedLow) / 2, '.2f')))
print(GndSpeedMean)
2
Bittikettu