/ 最近 .rdf 追記 編集 設定 本棚

脳log[20140128]



2014年01月28日 (火) 「== 0.0」がダメだというけれど、じゃあどう書いたらいいのという疑問が置き去りにされていた件。『Write Portable Code』の 139ページのこれが答えですか?「<監訳者注1>浮動小数点の比較には、直接比較演算子を使わず、比較対象aとbの差の絶対値がa付近での最小の刻み値(の絶対値)以下である場合に等しいとみなすことができます。つまり、倍精度浮動小数点の場合、fabs(a - b) <= fabs(DBL_EPSILON * a)が真となるケースが等しくなります。」EPSILONそのままじゃだめだったのか……。■浮動小数点数は広範囲の値を扱うことができるけど、表現可能な値はその範囲内に疎ら(まばら)に散らばっているという説明を聞いたことがある。「a付近での最小の刻み値」っていうのが、aとaの隣の表現可能な値との間にありうる差(の絶対値)のことだよね。■ところで、比較演算子は未満ではなく以下? Rubyの Float::EPSILONに関する「1.0 + Float::EPSILON != 1.0 となる最小の値」という説明があてはまるなら等号が成り立つときは異なる数値と考えられそうだけど。そして、るりまのこの説明については、Float::EPSILONにかかる 1.0× が省かれてるってこと?■EPSILONはもちろん離散的な性質を持った数ではないだろう。「同じとみなせる」ことに着目するか「異なる数になる」ことに着目するかによって EPSILONをどちらかの側に倒す必要があって両方を同時に満たすことはできないのではないか。EPSILONの使用目的からるりまの説明の方を疑うけど……。■るりまの説明は EPSILONの定義そのままという感じ(ならもちろん間違ってはいない)。「浮動小数点数の同値比較には計算機イプシロンを使うこと - Tociyuki::Diary」理解できなーい。■同じ数であることと異なる数であることが一部オーバーラップしてるの?