Path: ccsf.homeunix.org!ccsf.homeunix.org!news1.wakwak.com!nf1.xephion.ne.jp!onion.ish.org!honnetnews!fiasapnews!fiaskry!news.tains.tohoku.ac.jp!news-sv.sinet!newsfeed.mesh.ad.jp!t-newsgw1.odn.ne.jp!nwall.odn.ne.jp!not-for-mail From: IIJIMA Hiromitsu Newsgroups: fj.comp.lang.c Subject: Re: double =?iso-2022-jp?B?GyRCJE5IZjNTGyhC?= Date: Thu, 04 Sep 2003 00:11:13 +0900 Organization: DENNOU GEDOU GAKKAI, N. D. D. http://www.dennougedougakkai-ndd.org Lines: 38 Message-ID: <3F560491.3F79F761@ht.sakura.ne.jp> References: NNTP-Posting-Host: eatcf-47p174.ppp15.odn.ne.jp Mime-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit X-Trace: nwall2.odn.ne.jp 1062601914 74199 211.121.6.174 (3 Sep 2003 15:11:54 GMT) X-Complaints-To: news@odn.ad.jp NNTP-Posting-Date: Wed, 3 Sep 2003 15:11:54 +0000 (UTC) X-Mailer: Mozilla 4.78 [ja] (Win98; U) X-Accept-Language: ja,en,zh-TW,zh,zh-CN,de,es,ko Xref: ccsf.homeunix.org fj.comp.lang.c:103 いいじまです。 > 数値計算の話だと言語は関係ないんですが、 御意。 > 一般的には、浮動小数点の場合は、== で比較してはいけません。 > その代わりに > 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