###前提
c言語初心者の高校生です。
書籍で勉強しているため、そこで分からなかった事を質問します。
###問題
float型の変数を0.0~0.01ずつ増やしていく様子と、int型の変数を0~100までインクリメントした値を100.0で割った値を求める様子を、横に並べて表示するプログラムを作成せよ。
また、0.0~1.0まで0.01ずつ増やした値すべての累計を求めるプログラムを作成せよ。
###該当のコード
lang
1#include <stdio.h> 2 3int main(void){ 4 double k, l; //累計 5 int i; 6 float x; 7 8 for(i = 0, x = 0.0; i <= 100, x <= 1.0; i++, x += 0.01){ 9 printf("x = %f", x); 10 printf(" x = %f\n", i / 100.0); 11 12 k += x; 13 l += i / 100.0; 14 } 15 putchar('\n'); 16 17 puts("Cumulative!"); 18 printf("x = %f", k); printf(" x = %f\n", l); 19 20 return 0; 21} 22
###疑問点
累計の「double」を「float」にすると、
累計(l)の方が
50.500000 → 50.500004
になるのですが、
これが何故だか分かりません。
実数を二進数に直すときに誤差がでるのは、分かるのですが
「double」や「float」で何がどう違うのかがよく分かりません。
###補足情報
書籍 : 新明解C言語 入門編
返信遅れるかもしれません
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/11 07:50