問題タブ [epsilon]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 目標 C: 安全な float 比較が異常に失敗する
私はコードを書き、本当に奇妙な問題に遭遇しました。2 つの float 間NO
の比較は、実際の比較が true の場合でも返されます。と比較して、安全な浮動小数点比較も使用しましたFLT_EPSILON
。これはコードです:
比較は常に失敗し、コードは無限ループに入ります。iOS 7 の 32 ビット デバイスと iOS 8 の iPhone 5S シミュレーターでこれをテストしました。
fortran - Fortran でマシン イプシロンを決定する
FORTRAN 90 で、コンピュータのイプシロンを決定するプログラムを作成するにはどうすればよいですか?
matlab - MATLABでマシンイプシロンを計算するには?
マシンのイプシロンを見つける必要があり、次のことを行っています。
しかし、それは私にこれを示しています:
私は何をすべきか?
java - Java: ダブル マシンのイプシロンは、1+x != 1? のような最小の x ではありません。
C/C++ の場合と同様に、 のような最小の表現可能な値であるという定義を使用して、Java でdouble
マシンのイプシロンを決定しようとしています。ウィキペディアによると、このマシンのイプシロンは(52 は仮数ビット数 - 1)と等しくなります。double
x
1.0 + x != 1.0
2^-52
double
私の実装では次のMath.ulp()
関数を使用します。
結果は私が期待したものです:
ここまでは順調ですね。ただし、与えられたeps
が実際にそのような最小 であることを確認すると、より小さいもの、別名による前の値があるようです:x
1.0 + x != 1.0
double
Math.nextAfter()
どちらが得られますか:
ご覧のとおり、定義に反して、1 に追加すると 1 にならないマシン イプシロンよりも小さいものがあります。
では、この定義による一般的に受け入れられているマシン イプシロンの値のどこが間違っているのでしょうか? それとも私は何かを逃しましたか?浮動小数点演算の別の難解な側面を疑っていますが、どこが間違っていたのかわかりません...
編集:コメント者のおかげで、私はついにそれを手に入れました。私は実際に間違った定義を使用しました! eps = Math.ulp(1.0)
は、表現可能な最小の double > までの距離を計算しますが、それ1.0
がポイントです。それはで最小でeps
はなく、その値の約2 倍です。x
1.0 + x != 1.0
1.0 + Math.nextAfter(eps/2)
1.0 + eps
python - Python イプシロンは最小数ではありません
何をsys.float_info.epsilon
返しますか?
私のシステムでは、次のようになります。
これはどのように可能ですか?
編集:
あなたは大丈夫です、私は epsilon が min と同じことをすると思っていました。だから私は実際に意味しsys.float_info.min
ました。
EDIT2
皆さん、特に John Kugelman さん、ご回答ありがとうございます。
自分自身に物事を明確にするために、いくつか遊んでいました:
したがってepsilon * min
、最小の正の仮数 (または仮数) と最小の指数を持つ数値が得られます。