_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 「Mod_fx」 Ver 1.1.1.2012.10.21 [*] 関数計算モジュール _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 種類 : フリーソフト 作者 : FunnyMaker 開発環境 : Hot Soup Processor for Windows (Ver3.31) □HSP(Hot Soup Processor) は、フリーで高性能な開発環境であり、ゲームやツールの制作が簡単に行えます。           □HSP(Hot Soup Processor) (C)Onion Software おにたま氏の著作物です。 ≪著作権および免責事項≫++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 本ソフトはフリーソフトです。自由にご使用ください。 本ソフトの著作権は作者、FunnyMakerが保有します。しかし、配布したり、改変したものを公開するのは自由です。 連絡・作者の表示は必要ありません。 このソフトを使用した結果起こったいかなる事故・損害等について作者は一切の責任を負いません。自己の責任において使用 してください。 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 動作環境 : Hot Soup Processor for Windows (Ver3.31) (∵strrep命令を使用している) 依存するモジュール : Mod_polynomial.as 必ず、「Mod_polynomial.as」を本モジュールよりも先にインクルードしてください。 ++++++++++++++++++++++++++++++++++++++++++++ 以下、本モジュールの説明となります。(敬体略) ++++++++++++++++++++++++++++++++++++++++++++ ●書式 val = Mod_fx(function,x,y,z) function : 関数が保存された文字列型変数 x,y,z : それぞれ、関数中のx,y,zに代入する値 返り値 : 文字列型 (例) "-3" エラーが発生した場合、返り値は"0"となり、「errcode@Name_Mod_fx」変数に0以外のエラーコードが保存される。 式の記述の正しさが保証されない場合は関数実行後にこれを参照すること。0ならばエラーは発生していない。 また、エラーコードは文字列型で返るので注意。 ●使用可能な演算 @ + : 加算 A - : 減算 B * : 乗算 C / : 除算 <記述規則> 数学の規則に従うこと。ただし、次に述べる特徴がある。 <特徴> 任意の位置に半角スペースを挿入できる。極端な例では、「89」を 「8 9」としてもよい。なぜなら、半角スペースはシステム内部で削除されるから。 負の数を加減乗除するときに負の数を()でくくらなくても正しく計算される。 実際には、システム内部の処理では負の数を()で囲まずに処理している。 「+-」,「-+」の記述は「-」に、「++」,「--」の記述は「+」として処理する。 数学の規則として当然であるが、()で囲まれた部分は計算順序の優先順位が高くなる。 計算はすべて実数の範囲内で行われる。 ●使用可能な数学定数 Mod_fxで使用可能な変数として「x,y,z」が使われているため、プログラム上の 問題で、定数名にx,y,zを含むことは出来ないので注意。 また、ある定数名が別の定数名の一部として含まれてはならないので注意。 ・m_e : ネイピア数。「2.7182818284590452354」が定義されている。 ・m_pi : 円周率。「3.14159265358979323846」が定義されている。 ●使用可能な変数 x,y,zの3つのみ。この中のものなら好きなだけ使える。 ただし、乗算記号の省略は不可。 (例) 誤→「3x」/正→「3*x」 ●使用可能な数学関数 Mod_fxで使用可能な変数として「x,y,z」が使われているため、プログラム上の 問題で、関数名にx,y,zを含むことは出来ないので注意。 また、ある関数名が別の関数名の一部として含まれてはならないので注意。 ・powf[底(>0),指数] 指数関数。(例) powf[2,10] = 1024 ・log[底(>0),真数] 対数関数。(例) log[2,1024] = 10 ・sqrt[実数(>0)] 正の平方根を求める。 (例) sqrt[4] = 2 ・deg2rad[実数] 度数法で表された角度を弧度法で表された角に変換する。 (例) deg2rad[180] = 3.14159265358979323846 ・rad2deg[実数] 弧度法で表された角を度数法で表された角度に変換する。 (例) rad2deg[m_pi] = 180 ・sin[ラジアン] 正弦の値を求める。 (例) sin[m_pi] = 0 ・cos[ラジアン] 余弦の値を求める。 (例) cos[m_pi] = -1 ・tan[ラジアン] 正接の値を求める。 (例) tan[m_pi/4] = 1 ・arct[x変位,y変位] アークタンジェントを求める。返り値はラジアン単位。(例) arct[1,1] = 0.785398 x変位が0である場合、y変位が正ならば返り値はπ/2ラジアン,y変位が0ならば 返り値は0ラジアン,y変位が負ならば返り値は-π/2ラジアンとなる。 ・abs[実数] 絶対値を求める。 (例) abs(-2) = 2 ・limit[ターゲット,最小値,最大値] ターゲットを、指定された範囲内に補正する。 (例) limit[9,3,7] = 7 limit[-2,3,7] = 3 ・rdw[実数] 小数点以下を切り捨てる。 (例) rdw(3.9) = 3 rdw(-3.9) = -3 ・rdp[実数] 小数点以下を切り上げる。 (例) rdp(2.1) = 3 rdp(-2.1) = -3 ・gauss[実数] 与えられた実数を超えない最大の整数を求める。 (例) gauss[3.1] = 3 gauss[-2.1] = -3 ・factorial[自然数] 階乗を求める。 (例) factorial[4] = 24 ・perm[取り出し元の個数(0以上の整数),並べる個数(0以上の整数)] 「取り出し元の個数」個から「並べる個数」個取り出して並べる順列の総数。 (例) perm[4,2] = 12 ・combi[取り出し元の個数(0以上の整数),取り出す個数(0以上の整数)] 「取り出し元の個数」個から「取り出す個数」個選んで取る組み合わせの総数。 (例) combi[5,3] = 10 ●使用可能なコンピュータ関数 Mod_fxで使用可能な変数として「x,y,z」が使われているため、プログラム上の 問題で、関数名にx,y,zを含むことは出来ないので注意。 また、ある関数名が別の関数名の一部として含まれてはならないので注意。 ・random[最小値(整数),最大値(整数)] 整数の疑似乱数を発生させる。 ・rndreset[整数] 乱数のパターンを初期化する。パラメータを省略した場合はWindowsのタイマー から得られた不定な値を使って初期化する。 同じパラメータを使用すると、乱数の発生パターンを同じにできる。 この関数は処理され、0に置き換えられる。 ●エラーコード ・0 : 異常なし ・1 : 原因不明なエラー ・2 : 四則演算の記述が不正 ・3 : ゼロ除算が発生した ・4 : 未定義の記号が使われた ・5 : 各種数学関数のエラー。第二セクションの値によって関数を区別する。 セクションは「.」記号によってわけられる。区別は以下の通り。 ・1 : 関数が特定できない場合 ・2 : powf関数に関するエラー ・3 : log〃 ・4 : sqrt〃 ・5 : deg2rad〃 ・6 : rad2deg〃 ・7 : sin〃 ・8 : cos〃 ・9 : tan〃 ・10 : arct〃 ・11 : abs〃 ・12 : limit〃 ・13 : rdw〃 ・14 : rdp〃 ・15 : gauss〃 ・16 : factorial〃 ・17 : perm〃 ・18 : combi〃 これらにおいて、第三セクションの値によってエラーの内容を区別する。以下の通り。 ・1 : 記述が不正。パラメータの数が異常であるなど。 ・2 : 数学のルールを満たしていない。例えば対数関数の底が負であるなど。 ・6 : 各種コンピュータ関数のエラー。第二セクションによって関数を区別する。 区別は以下の通り。 ・1 : 関数が特定できない場合 ・2 : random関数に関するエラー ・3 : rndreset〃 これらにおいて、第三セクションの値によってエラーの内容を区別する。以下の通り。 ・1 : 記述が不正。パラメータの数が異常であるなど。 ・2 : 数学のルールを満たしていない。 以上yで定義される。例えばエラーコード「5.3.2」は対数関数の底か真数が不正であるエラーが 発生したことを意味する。 ●演算の仕組み ユーザーが入力した関数を「元関数」と呼び、f(x,y,z)で表す。(∵x,y,zの3変数関数) この中にはsin[]やcos[]等の様々な数学関数が含まれている可能性がある。また、() によって優先順位が高められている部分がある可能性がある。 f(x,y,z)中のsin[],cos[]等の関数を「子関数」と呼び、f(x,y,z)の直下にあるものを 「第一次子関数」、第一子関数の直下にあるものを「第二次子関数」と呼び、第三次 以降の子関数においても同様に考える。 一般に「第n次子関数」と呼ぶ。 (例) f(x,y,z) = 3*x+sin[x]+cos[powf[2,x]] この元関数において、「sin[x]」と「cos[powf[2,x]]」は第一次子関数であり、 「powf[2,x]」は第二次子関数である。 Mod_fxの役割はf(x,y,z)中の子関数をすべてその値で置き換えることである。 ()の展開や四則演算の処理は行わない(行えない)。その理由は本文を読み進めていけば 分かる。 計算を開始する前に、元関数の文法エラーを可能な限り検出しておく。エラーが見つか った場合は計算を行わない。文法エラーは無限ループ等の致命的な動作を引き起こす 場合があるので必ず弾かなくてかならない。 エラーチェックの後、計算を開始する。 先ず、内部に子関数を持たない子関数の値から順番に求めて置き換えてゆく。 なぜならば、内部に子関数を持たない子関数の中のパラメータは単純な多項式となる ので、統一した流れでf(x,y,z)を消化してゆけるからである。 Mod_fx自体は多項式の計算能力を持たないので、子関数のパラメータの値の計算は Mod_polynomialモジュールが行う。 Mod_polynomialは多項式中の変数を扱えないので、あらかじめ多項式中の変数に 値を代入してからMod_polynomialに渡す。 Mod_fxは、元関数中の子関数をすべてその値で置き換えた後、ただの多項式となった 元関数をそのままMod_polynomialへ渡す。返ってきた値を取得して、元関数の計算が 終了する。従って、Mod_fxは四則演算を行う必要がなく、()や四則演算記号を残したま ますべての子関数を置き換える作業のみを行えばよい。ただし、子関数を計算する過程 で、子関数内部のパラメータに含まれる四則演算はMod_polynomialによって処理され る。 ++++++++++++++++++++++++++++++++++++++++++++ 以上、本モジュールの説明でした。 ++++++++++++++++++++++++++++++++++++++++++++ [*]開発履歴 ・ver 1.0.0.2012.10.18 ・・・・・ 第一次完成 ・ver 1.1.0.2012.10.19 ・・・・・ 「factorial」,「perm」,「combi」関数を追加。 第二次完成 ・ver 1.1.1.2012.10.21 ・・・・・エラーチェックを厳しくした。                  第三次完成 [*] 最後に 最後まで読んでいただき有難うございます。このソフトがあなたの役に立てたら幸いです。