Pythonの倍精度浮動小数点値?[閉まっている]


83

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


3
これは実際には、答えが異なる2つの質問です。1:Pythonの倍精度値はfloatであり、2:floatよりも精度の高いデータ型は10進数です。このような質問はどういうわけか分割できますか?受け入れられた回答は#2に対応しますが、最も賛成された回答は#1に対応します。
bsplosion

回答:


51

10進数のデータ型

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

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


私が元の質問をしている場合、@ larsmansが答えになります(正式にはトピックから外れていますが)。
Piotr Findeisen 2016

@PiotrFindeisenその答えはどこにありますか?
2017年

わかりませんが、@ FredFooを参照します。一般的に「Pythonの倍精度浮動小数点値?」→「float-s倍精度です」
Piotr Findeisen 2017年

117

Pythonの組み込みfloat型は倍精度です(doubleCPythonではC double、JythonではJavaです)。より高い精度が必要な場合は、NumPyを入手してそのを使用してくださいnumpy.float128


15
どうやら、numpy.float12864ビットシステムでは64ビット精度であることがよくあります。numpy.float128(1) + numpy.float128(2**-64) - numpy.float128(1)を返します0.0stackoverflow.com/a/29821557/420755
Jeff

16

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

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

(他のアプリケーションについてdecimalは、他の応答で示唆されているように、があります。)


1
小数と分数のどちらを選択するにはどうすればよいですか?分数は、Decimalでは表現できない連分数を表すことができるので、より良いようです。
Janus Troelsen 2012年

1
@Janus:要件を検討し、それらにより適したものを選択してください。Decimal固定された(ただし構成可能な)精度を持つ概数で作業する場合に使用します。Fraction正確な比率で作業したい場合に使用し、無制限のストレージ要件に耐える準備ができています。
ガレスリース2012年

Fractionは、floatで実行できるすべての操作をサポートしていますか?
danijar 2015年


0

これが私の解決策です。まず、random.uniformを使用して乱数を作成し、倍精度で文字列にフォーマットしてから、floatに変換し直します。'.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)

上手。倍精度とは、floatの2進表現と比較して、変数の2倍の長さの2進表現を意味します。小数点以下2桁ではありません。
kravemir 2015年

あなたが正しいです。私自身がこの問題を抱えていたとき、私は悪い検索基準を使用した可能性があり、これが結果です。他の何人かは私がしたようにこれと同じ問題を検索してここに行き着くかもしれません。うまくいけば、彼らはいくつかの安堵を見つける。:)
Bittikettu 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.