1.4 数学どおりの答えになるか

では、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;
}