ページ 11

for文について

Posted: 2006年12月15日(金) 10:50
by arekku
初めて書き込みさせていただきます。よろしくお願いします。
現在、学校で出された問題をやっているのですが、for文のところで躓いてしまいました。
下のプログラムでiを0から3まで0.1ずつ増やし表示しているのですが、3.0を表示できません。
3.0を表示するにはiを0から3.1まで、みたいにしなければならないのでしょうか。
何かよい対策があれば、お願いします。

#include <stdio.h>

void main(){
double i;
for(i=0;i<=3;i+=0.1)printf("%lf\n",i);
}

Re:for文について

Posted: 2006年12月15日(金) 10:59
by box
> 下のプログラムでiを0から3まで0.1ずつ増やし表示しているのですが、3.0を表示できません。

浮動小数点数の誤差が原因です。コンピュータで浮動小数点数を扱う際、
ごくわずかながら誤差が発生するのはどうしても避けられません。

0.1を繰り返し加えていくとき、30回でちょうど3.0になるとは限りません。
おそらく、3.0をわずかに超えた値(3.0000000001のような値)になったために、
printfで出力せずにループから抜けたのでありましょう。

解決策の例を挙げます。
ループ制御用の変数をint型にして、出力の際にdouble型に変換しています。
#include <stdio.h>

int main(void)
{
	int i;
	
	for (i = 0; i <= 30; i++)
		printf("%f\n", (double) i / 10);
	return 0;
}

Re:for文について

Posted: 2006年12月15日(金) 11:13
by arekku
早速の返信ありがとうございました!
無事完成させることができました。
また何かわからなくなったときは、よろしくお願いします。