少し前にTwitterで、ε-δ論法に関連して、計算機イプシロンなるものがあるよ、というツイートを見かけた。 そして何の気なしにWikipedia で計算機イプシロン&note{machine-epsilon-ja-wikipedia:計算機イプシロン - Wikipedia, 2014-03-18版, 2017-09-18閲覧};について引いたら、MSDN&note{MSDN-machine-epsilon:データ型定数 (CRT), VS2005対応, 2017-09-18閲覧};&note{MSDN-machine-epsilon-vs2015:Data Type Constants, VS2015対応, 2017-09-18閲覧};の説明が誤っていると書いてあった。

まじかよと思って調べてみた。

検証環境 Visual Studio 2013 Professional Update 5 OS Windows 7 64bit Ultimate

結論

MSDNの定義の通りに解釈すると、計算機イプシロンの意味をなさない定義になってしまう。 MSDNの定義の通りの値だと、FLT_EPSILONより小さい値となってしまう

C/C++におけるfloat

計算機イプシロンの定義

16進数での表記

#geshi(c++){{ return 0; }}

#geshi(c++){{ return 0; }}

1.00000011920928960e+000        5.9604651881e-008       0x33800001

ULPについて

10x3f800000
1.000000119209289600x3f800001
FLT_EPSILON0x34000000
1 + x != 1 と 1 - x  != 1

なにゆえ、1なのか?

1.1920928955e-007       0x34000000
1.00000000000000000e+000        5.9604644775e-008       0x33800000

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-01-23 (火) 14:04:53