06
11月 09私もうfloatくんのこと…信じられない…!
ざわ…ざわ…
#include <stdio .h>
int main() {
float x = 16777216.0;
printf( "x = %f\n", x );
x += 1.0;
printf( "x+1.0 = %f\n", x );
x = 16777217.0;
printf( "16777217.0 = %f\n", x );
return 0;
}
出力: x = 16777216.000000 x+1.0 = 16777216.000000 16777217.0 = 16777216.000000
16777217 = 16777216
そうかわかった人類は滅亡する!
浮動小数は基本的に数が大きくなればなるほど精度(表せる数の幅)が大きくなるとか、16777215で仮数部が最大値となって指数部が繰り上がることによって数字の最小単位(分解能みたいなもの?)が2になるとか、ごにょごにょといろいろあるらしいのだけれど、解説はまた気が向いたら。ぼくに理解可能ならば。
posted on 2009-11-06 (金) 6:15 |
Tags: programming
014
12月 13th, 2009 at 20:57
float は最近の普通のマシンでは10進数に換算して7桁の精度しかないです。double にすれば10進16桁弱あります。
上のプログラムの float を double にするだけです。
そもそも %f は double を小数表示するフォーマットですし。