ホームページ  >  記事  >  バックエンド開発  >  Python の浮動小数点数は何バイトを占めますか?

Python の浮動小数点数は何バイトを占めますか?

anonymity
anonymityオリジナル
2019-06-12 11:24:4514695ブラウズ

浮動小数点数は、マシン上の浮動小数点数のネイティブ倍精度 (64 ビット) によって表されます。約 17 桁の精度と -308 ~ 308 の範囲の指数を提供します。 C言語のdouble型と同じです。 Python は 32 ビット単精度浮動小数点数をサポートしていません。プログラムで間隔と数値精度を正確に制御する必要がある場合は、numpy 拡張ライブラリの使用を検討してください。

Python 3.X では、浮動小数点数に対してデフォルトで 17 桁の精度が提供されます。

Python の浮動小数点数は何バイトを占めますか?

単精度と倍精度に関する一般的な説明:

単精度型と倍精度型、その型指定子は、float 単精度指定子、double 倍精度指定子です。 Turbo C では、単精度型はメモリ空間の 4 バイト (32 ビット) を占有し、その値の範囲は 3.4E-38 ~ 3.4E 38 で、有効数字は 7 桁しか提供できません。倍精度型は 8 バイト (64 ビット) のメモリ空間を占有し、その値の範囲は 1.7E-308 ~ 1.7E 308 で、有効数字 16 桁を提供できます。

17 桁を超える精度分析が必要です

Python のデフォルトの精度は 17 桁の 10 進数ですが、ここで問題が発生します。計算に高い精度 (小数点以下 17 桁以上) が必要な場合はどうすればよいですか?

1. 書式設定を使用します (推奨されません)

>>> a = "%.30f" % (1/3)
>>> a
'0.333333333333333314829616256247'

を表示することはできますが、正確ではなく、次の数値は多くの場合意味を持ちません。

2. 高精度のために 10 進数モジュールを使用し、getcontext と連携します

>>> from decimal import *
>>> print(getcontext())
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
>>> getcontext().prec = 50
>>> b = Decimal(1)/Decimal(3)
>>> b
Decimal('0.33333333333333333333333333333333333333333333333333')
>>> c = Decimal(1)/Decimal(17)
>>> c
Decimal('0.058823529411764705882352941176470588235294117647059')
>>> float(c)
0.058823529411764705

デフォルトのコンテキスト精度は 28 ビットですが、50 ビット以上に設定できます。 。このようにして、複雑な浮動小数点数を分析するときに、より高い制御精度を得ることができます。実際、コンテキスト内のrounding=ROUND_HALF_EVENパラメータに注目してください。 ROUND_HALF_EVEN、半分の場合は偶数に近くなります。

以上がPython の浮動小数点数は何バイトを占めますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。