Path: ccsf.homeunix.org!ccsf.homeunix.org!news1.wakwak.com!nf1.xephion.ne.jp!onion.ish.org!onodera-news!newsfeed.media.kyoto-u.ac.jp!oix.u-ryukyu.ac.jp!u-ryukyu.ac.jp!ie.u-ryukyu.ac.jp!gama.is.tsukuba.ac.jp!yas From: yas@is.tsukuba.ac.jp (Yasushi Shinjo) Newsgroups: fj.comp.lang.c Subject: Re: =?iso-2022-jp?B?ZG91YmxlIBskQiROSGYzUxsoQg==?= Date: 03 Sep 2003 14:04:01 GMT Organization: Institute of Information Sciences and Electronics, University of Tsukuba Lines: 28 Message-ID: References: NNTP-Posting-Host: kirk.hlla.is.tsukuba.ac.jp X-Trace: gama.is.tsukuba.ac.jp 1062597481 4616 130.158.85.129 (3 Sep 2003 13:58:01 GMT) X-Complaints-To: usenet@gama.is.tsukuba.ac.jp NNTP-Posting-Date: 3 Sep 2003 13:58:01 GMT In-reply-to: "Atsushi Hattori"'s message of Wed, 3 Sep 2003 12:43:28 +0900 Xref: ccsf.homeunix.org fj.comp.lang.c:102 新城@筑波大学情報です。こんにちは。 数値計算の話だと言語は関係ないんですが、 In article "Atsushi Hattori" writes: >  doubleの数値を比較、というより、==の場合を考えたい > のですが、何かいい方法はありませんでしょうか。 >  パソコンだと、プラスマイナス10^-14倍ぐらいで==と見る、 > とかでしょうか。 一般的には、浮動小数点の場合は、== で比較してはいけません。 その代わりに fabs((a-b)/a) <= epsilon とやるのが、一般的です。EPSILON が 0.01 なら、1% の精度で同 じという意味です。== で比較すると、繰り返して精度をあげてい くようなアルゴリズムでは、最後は行ったり来たりで振動して無限 ループになったりします。 double だと、48 ビットの精度があるのですが、それだけ 0.000...1 とやってもいいかというと、そうもいかないでしょう。 ギリギリだと、== と同じく振動して止まらないこともあるし。自 分が欲しい精度で止めるのでしょう。 Fortran の教科書には、書いてあるんでしょうけれど、C言語の教 科書にはあんまり書いてない話かもしれません。 \\ 新城 靖 (しんじょう やすし) \\ \\ 筑波大学 電子・情報       \\