問13 次のFortranプログラムの説明及びプログラムを読んで,設問1〜3に答えよ。 [プログラムの説明] 1 1 1 自然対数の底eは,無限級数 e=1+──+──+──+… で定義される。 1! 2! 3! 1 次の式(1)は,この無限級数の初めから ── の項までの有限数列の総和を表し, n! 式(2)は式(1)を変形したものである。両式とも,総和計算の項数を増やせば eの値に収束する。 1 1 1 1 e≒1+──+──+──+ … +── …………… (1) 1! 2! 3! n! 1 1 1 1 =1+──(1+──(1+ … +──(1+──) … )) …………… (2) 1 2 n-1 n プログラムは,これらの式をもとにeの値の近似値を印字するものである。 なお,この計算に用いたコンピュータの有効けた数は10進8けたであり,演算の 結果は有効けた数までで切り捨てる。 設問1 プログラム1は,式(1)に対応している。8行目のwrite文は,中間結果の 確認のために挿入したものである。nに3を入力したときの印字結果として最も 適切なものを,解答群の中から選べ。 [プログラム1] (行番号) 01 real :: s,w 02 integer :: k,n 03 read(*,*) n 04 s = 1.0 05 w = 1.0 06 do k = 1,n 07 w = real(k) * w 08 write(*,*) w 09 s = s + 1.0 / w 10 end do 11 write(*,*) s 12 end 解答群 ア 1.0000000 イ 1.0000000 ウ 1.0000000 エ 1.0000000 2.0000000 2.0000000 2.0000000 2.0000000 3.0000000 3.0000000 6.0000000 6.0000000 2.5000000 2.6666666 2.5000000 2.6666666
設問2 プログラム2は,式(2)に対応している。6行目のwrite文は,中間結果の 確認のために挿入したものである。nに3を入力したときの印字結果として最も 適切なものを,解答群の中から選ベ。 [プログラム2] (行番号) 01 real :: s 02 integer :: k,n 03 read(*,*) n 04 s = 1.0 05 do k = n,1,-1 06 write(*,*) s 07 s = 1.0 + s / real(k) 08 end do 09 write(*,*) s 10 end 解答群 ア 0.0000000 イ 1.0000000 ウ 1.0000000 エ 1.0000000 0.3333333 1.3333333 1.3333333 2.0000000 0.6666666 1.6666666 1.8333333 2.5000000 2.6666666 2.6666666 2.8333333 2.6666666
設問3 プログラム1とプログラム2の実行結果に関する次の記述中の[ ]に 入れる正しい答えを,解答群の中から選ベ。 表1に,nに5から12を入力したときの実行結果と,そのときの総和計算の真値を 1 示す。表2に──の値を示す。 n! nが10のときの実行結果は,プログラム1よりプログラム2の方が真値に近い値に なっている。プログラム1では,総和計算のときに大きな値から計算しているために, 加数と被加数の値に大きな差が生まれ,加数の値によらず,[ a ]加算される。 1 例えば,表2からnが10のときの──の値は0.0000002755… であるが,表1をみる n! と[ b ]ことがわかる。それに対して,プログラム2では,切捨ての誤差が相 対的に小さくなる方法で計算しているので,より真値に近い値が得られた。
表1 nが5から12までの実行結果
nプログラム1プログラム2 総和計算の真値
5 2.71666652.7166666 2.71666666666…
6 2.71805532.7180555 2.71805555555…
7 2.71825372.7182539 2.71825396825…
8 2.71827852.7182787 2.71827876984…
9 2.71828122.7182815 2.71828152557…
102.71828142.7182818 2.71828180114…
112.71828142.7182818 2.71828182619…
122.71828142.7182818 2.71828182828…
  1
表2 ──   の値
  n!
n 1
──
n!
1 1
2 0.5
3 0.1666666666…
4 0.0416666666…
5 0.0083333333…
6 0.0013888888…
7 0.0001984126…
8 0.0000248015…
9 0.0000027557…
100.0000002755…
110.0000000250…
120.0000000020…
解答群

  ア  0.0000002に切り捨てられて加算された

  イ  値が小さすぎて加算できなかった

  ウ  およそ0.0000002755×10-8の誤差が生じた

  エ  加数の小数第7位未満が必ず切り捨てられて

  オ  加数の有効数字8けた目まで正確に

  カ  計算結果の10-8倍の値の誤差をもって

  キ  正確に加算されている

戻る 次頁:問14