いいじまです。

> 数値計算の話だと言語は関係ないんですが、

御意。

> 一般的には、浮動小数点の場合は、== で比較してはいけません。
> その代わりに
>         fabs((a-b)/a) <= epsilon
> とやるのが、一般的です。EPSILON が 0.01 なら、1% の精度で同
> じという意味です。

御意。
ただ、a がちょうどゼロになってしまったらプロセッサと OS の設定によっては
ゼロ除算例外で落ちるだろ…と考えると、a や b がどういう挙動をする変数な
のか、とか、もう少しだけ手の込んだコードが必要になりますけどね。

> double だと、48 ビットの精度があるのですが、それだけ
> 0.000...1 とやってもいいかというと、そうもいかないでしょう。

標準的な 64 ビットの double 型だと仮数部は 54 ビット(仮数部の「1.」の後
に 53 ビット)ですね。x86 の long double は仮数部 64 ビット、指数部と符
号とで 16ビット、合計 80 ビットです。

> Fortran の教科書には、書いてあるんでしょうけれど、C言語の教
> 科書にはあんまり書いてない話かもしれません。

ですね。

FORTRAN77 全盛の時代は「数値計算=FORTRAN を使うこと」だったので FORTRAN
の教科書が扱っていたけど、C が実用的に数値計算に使われる時代になると多様
な言語(場合によっては効率の悪い言語も)が利用されるようになったので、誤
差の取り扱いのような話題は数値計算一般論の教科書に譲った、というべきでし
ょうね。

========================================================================
飯嶋 浩光 / でるもんた・いいじま   http://www.ht.sakura.ne.jp/~delmonta/
IIJIMA Hiromitsu, aka Delmonta           mailto:delmonta@ht.sakura.ne.jp