誰かが最後の数字が2または4の代わりに5である理由を具体的に説明できますか? 浮動小数点数が2進数の世界で不正確でなければならないことを知っているので、私は上のケースの結果がどのように詳細に行われたかを正確に得ることはできません。なぜ10/3が... 332または..334ではなく3.3333333333333335に等しいのですか?
4
A
答えて
5
... 335より小さい表現可能な最大値は... 330です(具体的には、2**-51
、または最後の場所の1単位で小さくなります)。 ... 333は... 330よりも335に近いので、これは可能な限り丸めることです。
これを確認するにはいくつかの方法があります。 MSeifertはCまたはCythonから直接<math.h>
でできることを示しています。 this visualization tool(Googlingの "浮動小数点表現"で検索し、上位の結果の1つを選択)を使用して、バイナリ表現で再生することもできます。
6
は、10/3
の「真の値」になります。これは最も近いa(64ビット)だからです。
math.h nexttoward
機能をラップする)ここcythonを使用
:
%load_ext cython
%%cython
cdef extern from "<math.h>" nogil:
# A function that get's the next representable float for the
# first argument in direction to the second argument.
double nexttoward(double, long double)
def next_float_toward(double i, long double j):
return nexttoward(i, j)
(またはあなたもnumpy.nextafter
を使用することができ@DSMで指摘したように)
私は10/3
の値を表示する場合、この値のため、前と次に表現フロートは、私が取得:
>>> '{:.50}'.format(10/3)
3.3333333333333334813630699500208720564842224121094
>>> '{:.50}'.format(next_float_toward(10/3., 0))
3.3333333333333330372738600999582558870315551757812
>>> '{:.50}'.format(next_float_toward(10/3., 10))
3.3333333333333339254522798000834882259368896484375
したがって、各OT彼女の表現可能な浮動小数点値は "さらに"離れている。
+1
私は、しかし、 'np.nextafter'はおそらくもっとシンプルです(答えは私が作業していましたが、' .hex() 'と' float.fromhex'を使って手動でビルドしました)。 – DSM
関連する問題
- 1. なぜPythonでは-103/100 == -2でも103/100 == 1ですか?
- 2. アサーションが等しくないのはなぜですか?
- 3. なぜPythonは({])が{}と等しくないのですか?
- 4. なぜcollectionViewでスペーシングが等しくないのですか?
- 5. =(等号)=を使った等価比較がJavaで正しく機能しないのはなぜですか?
- 6. なぜIHTMLDocument2がIHTMLDocument2.body.documentと等しくないのですか?
- 7. なぜ整数が等しくないのですか?
- 8. なぜsys.getsizeofがos.path.getsizeと等しくないのですか?
- 9. 各フレームの長さが等しくないのはなぜですか?
- 10. なぜstd :: functionにfunction_typeまたは同等のメンバータイプがないのですか?
- 11. irfftn(rfftn(x))がxと等しくないのはなぜですか?
- 12. なぜ\ d \ +か\ d +はここで\ d *と等しくないのですか?
- 13. PowerShellで "="だけでなく "-eq"と等しいのはなぜですか?
- 14. Scala:抽象型メンバーが型パラメータと等しい=> =等しくないのはなぜですか?
- 15. accelXは常にゼロに等しいのはなぜですか?
- 16. なぜR + G + Bが白色に等しくないのですか?
- 17. NP-complete対NP-hard(なぜそれらは等しくないのですか)
- 18. なぜis_atom(nil)がエリキシルでtrueに等しいのですか?
- 19. なぜ私のdataSnapshot.val()はnullに等しいですか?
- 20. クローン化されたHSSFCellStyleがクローン元のスタイルと等しくないのはなぜですか?
- 21. なぜwindow.scrollY + element.getBoundingClientRect()。topがelement.offsetTopと等しくないのですか?
- 22. なぜ!== 0は0ではなく0に等しい値を返しますか?
- 23. ファイルからの文字列が一般的な文字列と等しくないのはなぜですか?
- 24. はなぜPHPは2事業者「と等しくない」
- 25. なぜRubyではランダムがうまくいくのですか?
- 26. なぜPyHamcrestに負の平等マッチャーがないのですか?
- 27. 長さの異なるサンプルを比較すると、EMAが等しくないのはなぜですか?
- 28. Pythonスクリプトがまったく動作しないのはなぜですか?
- 29. なぜリスト[:: - 1]が等しくないリスト[:len(list): - 1]ですか?
- 30. なぜ私はしたくないのですか?
慎重に読んでください。これは、標準の「なぜこの浮動小数点の結果が不正確なのか」という質問ではありません。より具体的です:最後の数字の+/- 1以上のエラーはなぜですか? –
@ JohnKugelman番号のバイナリ表現なので、他の投稿で扱われているようです。それは間違っていますか? –
@ cricket_007:「バイナリなので」という表現は正確ではありますが、実際の説明として適格にするにはあまりにも多くの論理的な手順が欠けています。質問者は、浮動小数点はバイナリであることをすでに知っています。 – user2357112