8

何をsys.float_info.epsilon返しますか?

私のシステムでは、次のようになります。

>>> sys.float_info.epsilon
2.220446049250313e-16
>>> sys.float_info.epsilon / 2
1.1102230246251565e-16
>>> 0 < sys.float_info.epsilon / 2 < sys.float_info.epsilon
True

これはどのように可能ですか?

編集:

あなたは大丈夫です、私は epsilon が min と同じことをすると思っていました。だから私は実際に意味しsys.float_info.minました。

EDIT2

皆さん、特に John Kugelman さん、ご回答ありがとうございます。

自分自身に物事を明確にするために、いくつか遊んでいました:

>>> float.hex(sys.float_info.epsilon)
'0x1.0000000000000p-52'
>>> float.hex(sys.float_info.min)
'0x1.0000000000000p-1022'
>>> float.hex(1 + a)
'0x1.0000000000001p+0'
>>> float.fromhex('0x0.0000000000001p+0') == sys.float_info.epsilon
True
>>> float.hex(sys.float_info.epsilon * sys.float_info.min)
'0x0.0000000000001p-1022'

したがってepsilon * min、最小の正の仮数 (または仮数) と最小の指数を持つ数値が得られます。

4

6 に答える 6

5

epsilon1と次の表現可能な float との差です。0これは、 ではなくに最も近い数値となる最小の浮動小数点数とは異なり1ます。

基準に応じて、2 つの最小フロートがあります。正規化さminれた最小のフロートです。最小の非正規浮動小数点数はです。min * epsilon

>>> sys.float_info.min
2.2250738585072014e-308
>>> sys.float_info.min * sys.float_info.epsilon
5e-324

正規化浮動小数点数と非正規浮動小数点数の違いに注意してください。min実際には最小の浮動小数点数ではなく、完全な精度を持つ最小の浮動小数点数です。0非正規数はとの間の範囲をカバーしますがmin、多くの精度が失われます。5e-324は有効数字が 1 桁しかないことに注意してください。サブノーマルは、正規化されたフロートよりも最大 100 倍遅く、処理がはるかに遅くなります。

>>> (sys.float_info.min * sys.float_info.epsilon) / 2
0.0
>>> 4e-324
5e-324
>>> 5e-325
0.0

5e-324これらのテストにより、真に最小のフロートであることが確認されます。2 つのアンダーフローで除算して 0 にします。

参照: Python で float が持つことができる値の範囲は?

于 2015-04-17T21:31:35.970 に答える
1

あなたは実際にsys.float_info.min(「最小の正の正規化されたフロート」)を望んでいます。これはマシン上で私に与えます.2250738585072014e-308

epsilonは:

1 と、float として表現できる 1 より大きい最小値との差

のフィールドの詳細については、ドキュメントを参照してくださいsys.float_info

于 2015-04-17T21:31:29.350 に答える
0

1すべての答えが言うように、表現できる次の最大値との差です。その半分を 1 に追加しようとすると、1 が返されます。

>>> (1 + (sys.float_info.epsilon/2)) == 1
True

さらに、その 3 分の 2 を に追加しようとすると1、同じ値が得られます。

>>> (1 + sys.float_info.epsilon) == (1 + (sys.float_info.epsilon * (2./3)))
True
于 2015-04-17T21:35:53.280 に答える
0

最後の式は可能です。なぜなら、実数の正の数に対して0 < num/2 < num.

ドキュメントから:

1 と、float として表現できる 1 より大きい最小値との差

于 2015-04-17T21:29:25.850 に答える
0

sys.float_info は次のように定義されます

1 と、float として表現できる 1 より大きい最小値との差

このページで。

于 2015-04-17T21:29:43.640 に答える
0

ドキュメントでは、次のように定義sys.float_info.epsilonされています。

1 と、float として表現できる 1 より大きい最小値との差

ただし、フロートが大きいほど、連続するフロート間のギャップが大きくなるため、epsilonと次の小さいフロート間のギャップは よりもはるかに小さくなりepsilonます。特に、次に小さい float は 0 ではありません。

于 2015-04-17T21:31:32.607 に答える