next up previous
Next: この文書について... Up: 繰り返しのあるプログラム Previous: 2 FOR コマンドで繰り返し

3 例題: $ e$ を計算

$ e$ の無限級数展開

$\displaystyle e=\sum_{n=0}^\infty \frac{1}{n!}
$

を用いて $ e$ を計算しよう。

素朴な計算 exp1.BAS

REM exp1.bas
REM exp() を使うため100桁モードは使えない
option ARITHMETIC DECIMAL
INPUT N
LET fact=1
LET s=1
FOR i=1 TO n
   LET fact=fact*i
   LET s=s+1/fact
   PRINT i,s
NEXT i
PRINT s,s-EXP(1)
END

exp1.BAS の実行結果

? 10
 1                       2 
 2                       2.5 
 3                       2.66666666666667 
 4                       2.70833333333334 
 5                       2.71666666666667 
 6                       2.71805555555556 
 7                       2.71825396825397 
 8                       2.71827876984127 
 9                       2.71828152557319 
 10                      2.71828180114638 
 2.71828180114638       -2.73126652E-8 

当面はこのプログラムが理解できれば十分だが、 次のように副プログラム (SUBROUTINE) が作れるようになると、 一段レベルアップというところか。

サブルーチンの導入 exp2.BAS

REM exp2.bas
REM exp() を使うため100桁モードは使えない
OPTION ARITHMETIC DECIMAL
DECLARE EXTERNAL FUNCTION myexp
INPUT N
LET  e=myexp(1,N)
PRINT e,e-EXP(1)
END
EXTERNAL FUNCTION myexp(x,n)
OPTION ARITHMETIC DECIMAL
LET fact=1
LET t=1
LET s=1
FOR i=1 TO n
   LET fact=fact*i
   LET t=t*x
   LET s=s+t/fact
NEXT i
LET  myexp=s
END FUNCTION

exp2.BAS の実行結果

? 20
 2.71828182845904       -5.2E-15 

サブルーチンの導入 exp3.BAS

REM exp3.bas
REM exp() を使うため100桁モードは使えない
OPTION ARITHMETIC DECIMAL
DECLARE EXTERNAL FUNCTION myexp
FOR n=1 TO 20
   LET  e=myexp(1,N)
   PRINT n,e,e-EXP(1)
NEXT n
END
EXTERNAL FUNCTION myexp(x,n)
OPTION ARITHMETIC DECIMAL
LET fact=1
LET t=1
LET s=1
FOR i=1 TO n
   LET fact=fact/i
   LET t=t*x
   LET s=s+t*fact
NEXT i
LET  myexp=s
END FUNCTION

exp3.BAS の実行結果

 1                       2                      -.718281828459045 
 2                       2.5                    -.218281828459045 
 3                       2.66666666666667       -5.16151617923752E-2 
 4                       2.70833333333334       -9.9484951257052E-3 
 5                       2.71666666666667       -1.6151617923752E-3 
 6                       2.71805555555556       -2.262729034852E-4 
 7                       2.71825396825397       -2.78602050752E-5 
 8                       2.71827876984127       -3.0586177752E-6 
 9                       2.71828152557319       -3.028858552E-7 
 10                      2.71828180114638       -2.73126652E-8 
 11                      2.71828182619849       -2.2605552E-9 
 12                      2.71828182828617       -1.728752E-10 
 13                      2.71828182844676       -1.22852E-11 
 14                      2.71828182845823       -8.152E-13 
 15                      2.71828182845899       -5.52E-14 
 16                      2.71828182845904       -5.2E-15 
 17                      2.71828182845904       -5.2E-15 
 18                      2.71828182845904       -5.2E-15 
 19                      2.71828182845904       -5.2E-15 
 20                      2.71828182845904       -5.2E-15 


next up previous
Next: この文書について... Up: 繰り返しのあるプログラム Previous: 2 FOR コマンドで繰り返し
Masashi Katsurada
平成17年7月19日