for文について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
arekku

for文について

#1

投稿記事 by arekku » 18年前

初めて書き込みさせていただきます。よろしくお願いします。
現在、学校で出された問題をやっているのですが、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);
}

box

Re:for文について

#2

投稿記事 by box » 18年前

> 下のプログラムで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;
}

arekku

Re:for文について

#3

投稿記事 by arekku » 18年前

早速の返信ありがとうございました!
無事完成させることができました。
また何かわからなくなったときは、よろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る