平成24年度 技術士第一次試験問題【専門科目】
【16】情報工学部門
W−7
1/1 + 1/2 + 1/3 + ・・・ + 1/9999999 + 1/10000000 を計算するために、C言語で
次の2つの関数 A、Bを作った。ただし double はIEEE754に従う倍精度 (64bit) の
型であり、コンパイルされた機械語コードは、ソースコード中に記述された演算を
すべて順序どおりに実行するものとする。

double A () {
 int i; double sum = 0. 0;
 for (i = 1; i <= 10000000; i++) {
  sum += 1.0/(double) i;
 }
 return sum;
}

double B () {
 int i; double sum = 0.0;
 for (i = 10000000; i > = 1; i--) {
  sum += 1.0/ (double) i;
 }
 return sum;
}

A、Bの実行結果について、最も適切なものはどれか。

 @ AとBの結果は同じ精度になる。
 A Aの結果の方がBより精度が高い。
 B Bの結果の方がAより精度が高い。
 C Aはオーバーフローになるが、Bは正常に実行できる。
 D Bはオーバーフローになるが、Aは正常に実行できる。



【正解】 B
絶対値が大きい数と小さい数を足したり引いたりする場合に、その差が極端すぎて
小さい方の値が無視されてしまう現象を
情報落ちという。
Aのプログラムでは
 1から順に徐々に小さくなる値を足しこむため
 0.0000001のような絶対値の小さい値を足しこんでも情報落ちする。

【類題】
H18 W-3

EXCELのマクロのご相談なら ファーストマクロ 



W−6 目次 W−8
ファーストマクロ TOPページ