では、0.1 を N回 加算するとどうなるか、(数学どおりの答えが得られるか) 確かめてみよう。
<問題> 標準入力から正数Nを受け取り、0.1をN回加算し、その結果を表示しよう。(Nには、10, 100, 1000を)
実行例
% 0202 N? (10, 100, 1000) : 10 xa = 0.100000, sa = 1.0000001 → 1.0にならない 0.0000001の誤差 % 0202 N? (10, 100, 1000) : 100 xa = 0.100000, sa = 10.0000019 → 10.0にならない 0.0000019の誤差 % 0202 N? (10, 100, 1000) : 1000 xa = 0.100000, sa = 99.9990463 → 100.0にならない 0.000954の誤差
解答例 #include <stdio.h> int main (void) { float xa = 0.1; /* 浮動小数点 2進数の表現では、ぴったり表現できない */ float sa = 0.0; int i,n; printf("N? (10, 100, 1000) : "); scanf("%d", &n); for (i = 1; i <= n; i++) sa = sa + xa; printf("xa = %10.6f, sa = %10.7f\n", xa, sa); return 0; }