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:

One Response to “私もうfloatくんのこと…信じられない…!”

  1. 通りすがり Says:

    float は最近の普通のマシンでは10進数に換算して7桁の精度しかないです。double にすれば10進16桁弱あります。

    上のプログラムの float を double にするだけです。

    そもそも %f は double を小数表示するフォーマットですし。

Leave a Reply

«
»