Re: double の比較
新城@筑波大学情報です。こんにちは。
数値計算の話だと言語は関係ないんですが、
In article <bj3o18$ik7$1@caraway.media.kyoto-u.ac.jp>
"Atsushi Hattori" <hattori@sme.kuciv.kyoto-u.ac.jp> writes:
> doubleの数値を比較、というより、==の場合を考えたい
> のですが、何かいい方法はありませんでしょうか。
> パソコンだと、プラスマイナス10^-14倍ぐらいで==と見る、
> とかでしょうか。
一般的には、浮動小数点の場合は、== で比較してはいけません。
その代わりに
fabs((a-b)/a) <= epsilon
とやるのが、一般的です。EPSILON が 0.01 なら、1% の精度で同
じという意味です。== で比較すると、繰り返して精度をあげてい
くようなアルゴリズムでは、最後は行ったり来たりで振動して無限
ループになったりします。
double だと、48 ビットの精度があるのですが、それだけ
0.000...1 とやってもいいかというと、そうもいかないでしょう。
ギリギリだと、== と同じく振動して止まらないこともあるし。自
分が欲しい精度で止めるのでしょう。
Fortran の教科書には、書いてあるんでしょうけれど、C言語の教
科書にはあんまり書いてない話かもしれません。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735