初めて書き込みさせていただきます。よろしくお願いします。
現在、学校で出された問題をやっているのですが、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);
}
for文について
Re:for文について
> 下のプログラムでiを0から3まで0.1ずつ増やし表示しているのですが、3.0を表示できません。
浮動小数点数の誤差が原因です。コンピュータで浮動小数点数を扱う際、
ごくわずかながら誤差が発生するのはどうしても避けられません。
0.1を繰り返し加えていくとき、30回でちょうど3.0になるとは限りません。
おそらく、3.0をわずかに超えた値(3.0000000001のような値)になったために、
printfで出力せずにループから抜けたのでありましょう。
解決策の例を挙げます。
ループ制御用の変数をint型にして、出力の際にdouble型に変換しています。
浮動小数点数の誤差が原因です。コンピュータで浮動小数点数を扱う際、
ごくわずかながら誤差が発生するのはどうしても避けられません。
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; }