指数関数

e^xの値を求めます。logxとの併用で、任意の指数関数の値を求めることが可能です。

 

イベント命令の記述例と、相互変換モジュールを用いて貼り付けるためのコードを併記しています。実際に入力する際は、相互変換モジュールを用いてスイッチ・変数番号を任意の番号に書き換えて変換すると効率的です。

概要

テイラー展開を用いた指数関数の計算です。引数の10000倍を『V[0001]:引数』に入れて実行すると、指数関数の値の100倍が『V[0002]:結果』に返ります。引数は負の数も含め、任意の数を指定できます。例えばe^8.2941を求めるには、引数に82941を入れて実行すれば、結果に401152が返ります(真値は4000.20……)。

イベント命令

相互変換モジュール用コード イベント命令記述例
#include "rpgfunc.as"

/* スイッチ・変数番号を入力 */
v1 = 1  // 変数1:引数
v2 = 2  // 変数2:結果
v3 = 3  // 変数3:√eの個数
v4 = 4  // 変数4:2の個数

/* 以下、イベント命令の構文 */
varsel v3 : var 0, 0, 0, 0
cy
        co 1, v1, 0, 5000, 1
                varsel v1 : var 2, 0, 5000, 0
                varsel v3 : var 1, 0, 1, 0
        coelse
                co 1, v1, 0, -5000, 2
                        varsel v1 : var 1, 0, 5000, 0
                        varsel v3 : var 2, 0, 1, 0
                coelse
                        cybreak
                coend
        coend
cyend
varsel v2 : var 0, 1, v1, 0
varsel v2 : var 1, 0, 30500, 0
varsel v2 : var 4, 0, 1000, 0
varsel v2 : var 3, 1, v1, 0
varsel v2 : var 1, 0, 605000, 0
varsel v2 : var 4, 0, 10000, 0
varsel v2 : var 3, 1, v1, 0
varsel v2 : var 1, 0, 500, 0
varsel v2 : var 4, 0, 1000, 0
varsel v2 : var 1, 0, 600, 0
varsel v4 : var 0, 0, 0, 0
cy
        co 1, v3, 0, 1, 1
                co 1, v2, 0, 1555, 1
                        varsel v2 : var 1, 0, 1, 0
                        varsel v2 : var 4, 0, 2, 0
                        varsel v4 : var 1, 0, 1, 0
                coend
                varsel v2 : var 3, 0, 643, 0
                varsel v2 : var 1, 0, 195, 0
                varsel v2 : var 4, 0, 390, 0
                varsel v3 : var 2, 0, 1, 0
        coelse
                co 1, v3, 0, -1, 2
                        varsel v2 : var 3, 0, 390, 0
                        varsel v2 : var 1, 0, 322, 0
                        varsel v2 : var 4, 0, 643, 0
                        varsel v3 : var 1, 0, 1, 0
                coelse
                        cybreak
                coend
        coend
cyend
co 1, v4, 0, 1, 0
        varsel v2 : var 3, 0, 2, 0
        varsel v4 : var 2, 0, 1, 0
coend
co 1, v4, 0, 2, 1
        varsel v2 : var 3, 0, 4, 0
        varsel v4 : var 2, 0, 2, 0
coend
varsel v2 : var 1, 0, 3, 0
varsel v2 : var 4, 0, 6, 0
cy
        co 1, v4, 0, 0, 2
                cybreak
        coend
        varsel v2 : var 3, 0, 2, 0
        varsel v4 : var 2, 0, 1, 0
cyend
send
使用変数
  • 『V[0001]:引数』
  • 『V[0002]:結果』
  • 『V[0003]:√eの個数』
  • 『V[0004]:2の個数』
◆変数の操作:[0003:√eの個数]代入,0
◆繰り返し処理
 ◆条件分岐:変数[0001:引数]が5000以上
  ◆変数の操作:[0001:引数]減算,5000
  ◆変数の操作:[0003:√eの個数]加算,1
  ◆
 :それ以外の場合
  ◆条件分岐:変数[0001:引数]が-5000以下
   ◆変数の操作:[0001:引数]加算,5000
   ◆変数の操作:[0003:√eの個数]減算,1
   ◆
  :それ以外の場合
   ◆繰り返し処理の中断
   ◆
  :分岐終了
  ◆
 :分岐終了
 ◆
:以上繰り返し
◆変数の操作:[0002:結果]代入,変数[0001]の値
◆変数の操作:[0002:結果]加算,30500
◆変数の操作:[0002:結果]除算,1000
◆変数の操作:[0002:結果]乗算,変数[0001]の値
◆変数の操作:[0002:結果]加算,605000
◆変数の操作:[0002:結果]除算,10000
◆変数の操作:[0002:結果]乗算,変数[0001]の値
◆変数の操作:[0002:結果]加算,500
◆変数の操作:[0002:結果]除算,1000
◆変数の操作:[0002:結果]加算,600
◆変数の操作:[0004:2の個数]代入,0
◆繰り返し処理
 ◆条件分岐:変数[0003:√eの個数]が1以上
  ◆条件分岐:変数[0002:結果]が1555以上
   ◆変数の操作:[0002:結果]加算,1
   ◆変数の操作:[0002:結果]除算,2
   ◆変数の操作:[0004:2の個数]加算,1
   ◆
  :分岐終了
  ◆変数の操作:[0002:結果]乗算,643
  ◆変数の操作:[0002:結果]加算,195
  ◆変数の操作:[0002:結果]除算,390
  ◆変数の操作:[0003:√eの個数]減算,1
  ◆
 :それ以外の場合
  ◆条件分岐:変数[0003:√eの個数]が-1以下
   ◆変数の操作:[0002:結果]乗算,390
   ◆変数の操作:[0002:結果]加算,322
   ◆変数の操作:[0002:結果]除算,643
   ◆変数の操作:[0003:√eの個数]加算,1
   ◆
  :それ以外の場合
   ◆繰り返し処理の中断
   ◆
  :分岐終了
  ◆
 :分岐終了
 ◆
:以上繰り返し
◆条件分岐:変数[0004:2の個数]が1
 ◆変数の操作:[0002:結果]乗算,2
 ◆変数の操作:[0004:2の個数]減算,1
 ◆
:分岐終了
◆条件分岐:変数[0004:2の個数]が2以上
 ◆変数の操作:[0002:結果]乗算,4
 ◆変数の操作:[0004:2の個数]減算,2
 ◆
:分岐終了
◆変数の操作:[0002:結果]加算,3
◆変数の操作:[0002:結果]除算,6
◆繰り返し処理
 ◆条件分岐:変数[0004:2の個数]が0以下
  ◆繰り返し処理の中断
  ◆
 :分岐終了
 ◆変数の操作:[0002:結果]乗算,2
 ◆変数の操作:[0004:2の個数]減算,1
 ◆
:以上繰り返し
◆