15

Rで表現可能な最大/最小の数値を取得しようとしています.

「.Machine」と入力した後

私が得た:

$double.xmin
[1] 2.225074e-308

$double.xmax
[1] 1.797693e+308

ただし、R コマンド プロンプトで 2.225074e-309 と入力しても、予想される 0 ではなく 2.225074e-309 が表示されます。

1 を足したり引いたりすると Inf (最大の数に 1 を足す) または 0 (最小の数から 1 を引く) になる最大/最小の数を見つけるにはどうすればよいですか?

4

2 に答える 2

16

.Machine$double.xmin浮動小数点計算に関する IEEE 754 技術標準の要件を満たす表現を持つ最小の正数の値を返します。倍精度浮動小数点数に関するウィキペディアの記事で言及されているように、その標準では次のことが必要です。

有効桁数が最大 15 桁の 10 進文字列を IEEE 754 倍精度表現に変換してから、同じ有効桁数の文字列に戻す場合、最終的な文字列は元の文字列と一致するはずです。IEEE 754 倍精度が少なくとも 17 桁の有効数字を持つ 10 進文字列に変換されてから倍精度に戻される場合、最終的な数値は元の数値と一致する必要があります。

同じ記事では、精度を犠牲にすることで、より小さな正の数 (標準の精度要件を満たしていない) を表すことができることに注意してください。

指数の 11 ビット幅により、10 -308から 10 308までの数値を 15 ~ 17 桁の精度で表現できます。精度を犠牲にすることで、非正規表現では約 5 × 10 -324までのさらに小さな値を使用できます。

の詳細セクションに記載されているように、R の double はまさにこのように動作します?.Machine

ほとんどのプラットフォームでは、'.Machine$double.xmin' よりも小さい正の値が発生する可能性があることに注意してください。典型的な R プラットフォームでは、最小の正の double は約 '5e-324' です。

それが R の double を使用して表現できる最小の正の値であることを確認し、精度の損失のコストを確認するには、次のようないくつかの操作を試してください。

5e-324
# [1] 4.940656e-324
2e-324
# [1] 0
1.4 * 5e-324
# [1] 4.940656e-324
1.6 * 5e-324
# [1] 9.881313e-324
于 2016-07-03T00:14:30.367 に答える