Index: [Article Count Order] [Thread]

Date:  Thu, 13 Mar 2003 06:48:10 +0900
From:  "Katsuya Higuchi" <bugbear@....nu>
Subject:  [XP-jp:04209] Re: 浮動小数点演算や幾何演算のテスト
To:  <extremeprogramming-jp@....jp>
Message-Id:  <001f01c2e8e1$19e8d490$0101a8c0@....nu>
References:  <20030312141250.0476.TERADA@....jp> <20030312172823F.hiranabe@....jp> <20030313003334.FCEF.SHIMADEN@....jp>
X-Mail-Count: 04209

樋口です。

----- Original Message -----
From: "Hiroyuki Shimada" <shimaden@....jp>
To: <extremeprogramming-jp@....jp>
Sent: Thursday, March 13, 2003 12:36 AM
Subject: [XP-jp:04208] Re: 浮動小数点演算や幾何演算のテスト


>  浮動小数は初心者なのですが、単純に
> std::numeric_limits<double>::epsilon() ではだめなのでしょうか。

これは「機械イプシロン」と呼ばれ、
1.0 + e != 1.0 となる最小の値 e のことです。
つまり浮動小数点数の「仮数部の精度」を示します。
普通の double だと 2.2204460492503131E-16 とかです。
float だと 1.19209290e-07 とかです。
(環境で異なるので注意。)

「仮数部の精度」なので、
演算をすると、「仮数部」にそれ以上の誤差が発生します。
(a±e) * (b±e) を考えればわかるかと思います。

また、「仮数部の精度」なので、
指数を含んだ値とはそのまま演算できません。
そのまま fabs(x - r) < e というような判定には使うことはできません。


しかし、コンピュータでの数値計算って、
しっかり教えてくれるところないですよねぇ。
困ったもんです。

// 樋口 勝也
// bugbear@....nu