C言語関係掲示板

過去ログ

No635 float型変数の表示が・・・

[戻る] [ホームページ]
No.6714

float型変数の表示が・・・
投稿者---PPTM(2003/05/24 22:52:30)


今日からCの勉強をはじめました。
本を読みながらサンプルを試しているのですが、早速解せないところが出てきました。
ご助言をお願いします。

OS: WinXP
コンパイラ: Borland C++ Compiler

<pre>
#include <stdio.h>

int main(void)
{
char ch;
float f;
double d;

ch = 'X';
f = 100.123;
d = 123.009;

printf("chは %c、", ch);
printf("fは %f、", f);
printf("dは %f", d);

return 0;
}
</pre>
というプログラムを実行すると

chは X、fは 100.123001、dは 123.009000

という結果になってしまいます。
float型の変数に 100.123 を代入したのに、100.123001 と表示されるのはなぜでしょう?
最後の1ってなんでしょうか?



No.6716

Re:float型変数の表示が・・・
投稿者---TDa(2003/05/24 23:05:52)



>という結果になってしまいます。
>float型の変数に 100.123 を代入したのに、100.123001 と表示されるのはなぜでしょう?
>最後の1ってなんでしょうか?
>

CPUは所詮限りあるビットで数を扱いますからどうしても誤差が出ます。
処理系によって変わってくると思いますが一般的には内部では
2のx乗と言う形式で扱っています。ですからちょうど都合よくその形式に
収まらない数はどうしても誤差が生じます。実数型変数を扱うときはそれを意識
してコーディングしなければなりません。

No.6717

Re:float型変数の表示が・・・
投稿者---PPTM(2003/05/24 23:47:07)


>一般的には内部では
>2のx乗と言う形式で扱っています。ですからちょうど都合よくその形式に
>収まらない数はどうしても誤差が生じます。実数型変数を扱うときはそれを意識
>してコーディングしなければなりません。

なるほど、わかりました。
単純に0.000001ずつの数が有効なのかと思っていました。
もっと勉強します。
ありがとうございました。