[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