[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:29987] Re: バグなのかどうか自信がないのですが。



さくです。

At Tue, 25 Sep 2001 02:17:33 +0900,
IIZUKA Soichi wrote:

> Cは、ほとんどわからないのですが、

C++ですね。

> 変わって当たりのような。

というか……

  0.00 + 0.01 + 0.02 + ... + 0.99 + 1.00
= 0.01 * (1 + 2 + ... 99 + 100)
      100
= 0.01Σk = 0.01 * (100 + 1) * 100 / 2
      k=1
= 50.5
  ^^^^

および

  0.0 + 0.1 + 0.2 + ... + 0.9 + 1.0
= 0.1 * (1 + 2 + ... 9 + 10)
     10
= 0.1Σk  = 0.1 * (10 + 1) * 10 / 2
     k=1
= 5.5
  ^^^

のはずなのに、「どうして前者が 49.5?」 ということでしょうか?

for文の中で
    cout << "#+" << i << " => " << total << endl;
のようにして逐一 i と total を出力してみるとわかりますが、0.99 + 0.01 の計
算結果で 1.00 を越えてしまい、ループを抜けるようですね。二進表現の誤差の問
題でしょうか。

:
:
#+0.97 => 47.53
#+0.98 => 48.51
#+0.99 => 49.5
49.5

:
:
#+0.8 => 3.6
#+0.9 => 4.5
#+1 => 5.5

-- 
OZAWA -Crouton- Sakuro
E-Mail: mailto:crouton@xxxxxxxxxxxxxxxx
   Web: http://www.weatherlight.org/~crouton/
   PGP: C98F 74E0 AEEB 4578 1DFC  F650 3BE0 9627 11FC C9F5
VERBA VOLANT, SCRIPTA MANENT