の無限級数展開
素朴な計算 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 |