浮動小数点数は、マシン上の浮動小数点数のネイティブ倍精度 (64 ビット) によって表されます。約 17 桁の精度と -308 ~ 308 の範囲の指数を提供します。 C言語のdouble型と同じです。 Python は 32 ビット単精度浮動小数点数をサポートしていません。プログラムで間隔と数値精度を正確に制御する必要がある場合は、numpy 拡張ライブラリの使用を検討してください。
Python 3.X では、浮動小数点数に対してデフォルトで 17 桁の精度が提供されます。
単精度と倍精度に関する一般的な説明:
単精度型と倍精度型、その型指定子は、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 サイトの他の関連記事を参照してください。