☆ぽっち☆◎さんとモバ友になろう!
日記・サークル・友達・楽しみいっぱい!
-
- 2012/5/18 1:41
- 丸め誤差と情報欠落
-
- コメント(3)
- 閲覧(14)
-
-
- float f,t,r;
// n=1000の場合
f = 0.0;
r = 0.0;
for(int i = 0; i<1000; i++) {
f+=1.0/1000.0;
}
printf("float: n=%d sum=%f\n", 1000, f);
// n=4096の場合
f = 0.0;
for(int i = 0; i<4096; i++) {
f += 1.0/4096.0;
}
printf("float: n=%d sum=%f\n", 4096, f);
}
f+=1.0/1000.0を
t = f +( 1.0/1000.0 + r );
r = ( 1.0/1000.0 + r ) - ( t - f );
f = t;
と書き換えると1になります
t:f+=1.0/1000.0をf=f+1.0/1000.0にひろった誤差rもくわえている
r:誤差をひろう
なぜ1.0/1000.0だと誤差がでて
1.0/4096.0だとちゃんと1ってでるんですか
情報欠落と丸め誤差が関係してるそうです。
わってることは1.0/1000.0は2進数になおすと循環小数?になるらしいです
- float f,t,r;