_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 「mod_fx3」 by FunnyMaker DevelopmentStart : 2014/2/26 LastChange : 2014/3/27 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 種類 : フリーソフト 作者 : FunnyMaker 開発環境 : Hot Soup Processor for Windows (Ver3.32) □HSP(Hot Soup Processor) は、フリーで高機能な開発環境であり、ゲームやツールの制作が簡単に行えます。           □HSP(Hot Soup Processor) (C)Onion Software おにたま氏の著作物です。 動作環境 : ・HotSoupProcessor ver 3.31以降 ・HSP3dish Windows用とandroid版hsp3dish用の二種類があります。 Windows用のモジュールを、android版hsp3dishのバグにあわせてうまく動くように手入れをしたものが android版hsp3dish用です。 android版hsp3dish用はWindows上でも全く問題なく動きますが、奇天烈な処理が挟まっているので効率が悪く、 Windows上で敢えてandroid版hsp3dish用を使うことは推奨しません。 iOS用は作っていませんが、android版hsp3dish用のものが動くと思います。 依存するモジュール : 「mod_CharStr」 「mod_CharStr.as」を「Mod_fx.as」よりも先にインクルードしてください。(順序を逆にしても正常に動きますが、推奨しません。) ++++++++++++++++++++++++++++++++++++++++++++ 以下、本モジュールの説明となります。(敬体略) ++++++++++++++++++++++++++++++++++++++++++++ < 概要 > 文字列データとして与えられた数式の値を求めて実数値で返すのが仕事。 半角英数字及び_を用いたユーザー定義の変数と、π,e相当の数学定数を使用できる。 文字列で与えられた数式からコードを生成し、それをもとに計算する。 < 文字列式の書式 > まず例を示す。 (例1) 1+2+3 (例2) 0.1*20/1000 (例3) (22.4+11.2)*C (例4) sqrt(powf(r*cos(x),2)+powf(r*sin(x),2)) 上の例のように、普通の数式とほとんど同じ記述ルールである。 四則演算の優先順位、括弧のある計算の順序も通常の数学と同様である。 ()を多重に使うことができる。 数値はすべて実数型で処理される。 特徴を挙げると、以下のようになる。 ・{},(),[]どれを使っても良い。数式コード生成時に()に統一される。 (例 | sin(x) ← ○ sin{x} ← ○ sin[x] ← ○ ) ・任意の場所に半角スペースを入れて良い。数式コード生成時に削除される。(例 | 2 + 3 →(整形処理)→ 2+3 , sq rt(3 6) →(整形処理)→ sqrt(36) ) ・積を表す記号 * は省略不可。(例 | 2x ← × 2*x ← ○ ) ・負の数を()や{},[]で囲まなくてよい。囲まない方が処理が僅かに速くなる。 (例 | 3*(-2) ← ○ 3*-2 ← ◎ ) ・定数名,関数名の大文字・小文字は区別されない。(⇒どちらで書いてもよい。) ・数学定数は数式コード生成時に数値で置き換えられる。 変数の規則については「< 変数 >」を参照。 < サポートされている演算記号・関数・定数 > < 演算記号 > + : 加算 - : 減算 * : 乗算 / : 除算 < 関数 > mod : 余り。mod(割られる数,割る数) sin : 正弦(サイン) cos : 余弦(コサイン) tan : 正接(タンジェント) asin : 逆正弦 (※ -90°〜 +90°の範囲で求める) acos : 逆余弦 (※ 0°〜 +180°の範囲で求める) atan : 逆正接 (※ -90°〜+90°の範囲で求める)。atan(u) atan2 : 逆正接 (※ 〃)。atan2(y,x) sinh : 双曲線正弦(ハイパボリックサイン) cosh : 〃余弦(〃コサイン) tanh : 〃正接(〃タンジェント) asinh : 双曲線逆正弦(アークハイパボリックサイン) acosh : 〃逆余弦(〃コサイン) (※ 0以上の範囲で求める) atanh : 〃逆正接(〃タンジェント) deg2rad : 度数法から弧度法へ変換 rad2deg : 弧度法から度数法へ変換 sqrt : 正の平方根 exp : 指数値。eのx乗 pow : 累乗。pow(底,指数) log : 自然対数 log10 : 常用対数 logar : 対数。logar(底,真数) limit : 制限。limit(ターゲット,下限,上限) max : 最大値。max(数式1,数式2,……,数式n)。例えば、max(sin(m_pi/6),sin(m_pi/3),sin(m_pi/2)) → double(1) min : 最小値 abs : 絶対値 floor : 床関数 round : 四捨五入 ceil : 天井関数 int : 0の方向に丸める sgn : 符号関数 factorical : 階乗 perm : 順列の総数。perm(要素数,取り出して並べる個数) combi : 組み合わせの総数。combi(要素数,取り出す個数) ※パラメータ数が自由な関数の一つ当たりのパラメータは最大で100個。 < 定数 > m_e : ネイピア数。2.7182818284590452354 で定義。 m_pi : 円周率。3.14159265358979323846 で定義。 < 変数 > 半角英数字及び_を用いて、次の条件を満たす任意の名前の変数を作れる。 ・1文字目が数字でない ・既存の数学定数や数学関数と同名でない 変数名の大文字・小文字は区別される。 変数は最大で100個まで定義できる。 変数の定義は解除することもできる。 定義された変数には0〜99の範囲のIDが割り振られる。原則として、未使用のIDのうち最も若いものが割り当てられる。 ある変数の定義を解除した後に同名の変数を再定義した場合、同じIDが割り振られるとは限らないので、 その変数を使用している数式の数式コードは再生成する必要がある。 < トークン属性識別子 > トークンの属性を識別するための値を定める。 1 : 数値 20 : 変数 30 : * 31 : / 32 : + 33 : - 40 : ( 41 : ) 50 : , 610 : mod 620 : sin 621 : cos 622 : tan 623 : asin 624 : acos 625 : atan 626 : atan2 630 : sinh 631 : cosh 632 : tanh 633 : asinh 634 : acosh 635 : atanh 640 : deg2rad 641 : rad2deg 650 : sqrt 660 : exp 661 : pow 670 : log 671 : log10 672 : logar 680 : limit 690 : max 691 : min 6100 : abs 6110 : floor 6111 : round 6112 : ceil 6113 : int 6120 : sgn 6130 : factorical 6140 : perm 6141 : combi < 命令・関数 > □ mfx_init (命令) モジュールの初期化 変数はすべてリセット(undefine)される。 HSPランタイム起動後、初めて本モジュールを使う前に必ず実行すること。 [書式] mfx_init □ mfx_defvar (命令) 変数の定義 [書式] mfx_defvar "変数名",初期値 成功した場合はstatに変数IDが返る。 それ以外の場合は次の通り。 (-1,-2,-3) = (IDが枯渇している,同名の変数が既に定義されている,変数名が不正) □ mfx_undefvar (命令) 変数の定義解除 [書式] mfx_undefvar "変数名" 命令実行後のstatの値とその意味は次の通り (0,1)=(成功,指定された変数が定義されていない) □ mfx_pullvarval (関数) 変数の値の参照 [書式] val = showvarval("変数名") 指定された変数が存在しない場合は非数(-1.#IND00)が返る。 □ mfx_pushvarval (命令) 変数に値を代入 [書式] mfx_pushvarval "変数名",数値 命令実行後のstatの値とその意味は次の通り (0,1)=(成功,指定された変数が定義されていない) □ mfx_compile (命令) 数式コードの生成 [書式] mfx_compile p1,array1,array2 p1 : 文字列式 array1 : 数式コードを格納するための変数 (初期化不要) array2 : エラーコードを格納するための変数 (初期化不要) 変換後のトークンの個数は「count1_add_token_FC@mfx20」変数から参照できる。 エラーが発生した場合はstatの値が1に、それ以外の場合は0になる。 エラーの詳細はエラーコードを参照。 □ mfx_decompile (命令) 正しい数式コードの逆コンパイル トークンレベルのチェックのみを行い、数学的なチェックは行わない。 [書式] mfx_decompile array1,var,array2 array1 : 数式コード var : 文字列式を格納するための変数 (初期化不要。但し、予め十分量確保されている場合は処理時間が短くなる。) array2 : エラーコードを格納するための変数 (初期化不要) エラーが発生した場合はstatの値が1に、それ以外の場合は0になる。 エラーの詳細はエラーコードを参照。 □ mfx_calc (命令) 計算 [書式] mfx_calc array1,var,array2 array1 : 数式コード var : 結果を格納する変数 (初期化不要) array2 : エラーコードを格納するための変数 (初期化不要) エラーが発生した場合はstatの値が1に、それ以外の場合は0になる。 エラーの詳細はエラーコードを参照。 □ mfx_GetTokenID (命令) トークン(識別値)の取得 [書式] mfx_GetTokenIDF array1,p1,var array1 : 信頼できる数式コード p1 : トークン番号 var : 結果(整数値)を受け取る変数。 要素(0),(1)にそれぞれトークン識別値の第1,2セクションの値が格納される。 エラーが発生した場合はstatの値が1に、それ以外の場合は0になる。 □ mfx_GetTokenStr (命令) トークン(文字列)の取得 [書式] mfx_GetTokenStr array1,p1,var array1 : 信頼できる数式コード p1 : トークン番号 var : 結果(文字列)を受け取る変数 エラーが発生した場合はstatの値が1に、それ以外の場合は0になる。 □ mfx_IsClosedBracketFormula (命令) 指定された部分が単項式または括弧で閉じられた式およびそれらの積で表されるものかどうかを調べる [書式] mfx_IsClosedBracketFormula array1,p1,p2 array1 : 信頼できる数式コード p1,p2 : 評価開始,終了トークン番号 単項式または括弧で閉じられた式およびそれらの積で表される場合はstatの値が1になり、そうでないばあいは0になる。 エラーが発生した場合はstatの値が-1になる。 < エラーコード > エラーが発見され次第、処理が中断され、エラーコードが返る。 そのため、複数のエラーを一度に見つけることはできない。 < 「mfx_compile」命令におけるエラーコード > この命令では文法エラーが検出される可能性がある。 エラーコードを格納する変数を E とすると、Eは要素数4の一次元整数型配列変数であり、 エラーコードは配列要素(0)〜(3)によって、3セクションに分けられている。 第一セクションにはエラーの有無 第二セクションにはエラーが発見されたトークンの番号 (※不明な場合は-1) 第三セクションにはエラーの原因 が数値で記録される。 数式コードの生成時に +-,-+ があれば - に、 *+ があれば * にそれぞれ置き換えられているので、トークンの番号には注意が必要。 ここでは、要素 (0),(1),(2) がそれぞれ a,b,c であるようなエラーコードを、便宜上、 a.b.c と表すことにする。 第nセクションまでの情報によってエラーの全貌が把握できる場合、第(n+1)セクション以降の値は無視すればよい。 以下、各セクションの値が意味する内容を示す。 < 第一セクション > 0 : エラーなし 1 : エラーあり < 第二セクション > エラーが発見されたトークンの番号 (※不明な場合は-1) < 第三セクション > 0 : 式全体が空文字列である 1 : 不明なトークン 2 : 数値の左側が + - * / ( , のいずれでもない 3 : ( の左側が ( , 関数名 + - * / のいずれでもない 4 : ( が閉じられていない 5 : ) が多すぎる 6 : , * / のいずれかで式が終わっている 7 : ) , * / のいずれかの左側が ) 数値 変数名 のいずれでもない 8 : + で式が終わっている 9 : + の左側が ( ) , 数値 変数名 のいずれでもない 10 : - で式が終わっている 11 : - の左側が ( ) , 数値 変数名 * / のいずれでもない 12 : 数学関数に所有されていない , がある 13 : 数学関数のパラメータが多すぎる 14 : 数学関数のパラメータが少なすぎる < 「mfx_decompile」命令におけるエラーコード > この命令では文法エラーが検出される可能性がある。 エラーコードを格納する変数を E とすると、Eは要素数4の一次元整数型配列変数であり、 エラーコードは配列要素(0)〜(3)によって、3セクションに分けられている。 第一セクションにはエラーの有無 第二セクションにはエラーが発見されたトークンの番号 第三セクションにはエラーの原因 が数値で記録される。 ここでは、要素 (0),(1),(2) がそれぞれ a,b,c であるようなエラーコードを、便宜上、 a.b.c と表すことにする。 第nセクションまでの情報によってエラーの全貌が把握できる場合、第(n+1)セクション以降の値は無視すればよい。 以下、各セクションの値が意味する内容を示す。 < 第一セクション > 0 : エラーなし 1 : エラーあり < 第二セクション > エラーが発見されたトークンの番号 < 第三セクション > 0 : 不明なトークン 1 : 定義されていない変数を参照しようとしている < 「mfx_calc」命令におけるエラーコード > この命令では数学的エラーが検出される可能性がある。 エラーコードを格納する変数を E とすると、Eは要素数4の一次元整数型配列変数であり、 エラーコードは配列要素(0)〜(3)によって、3セクションに分けられている。 第一セクションにはエラーの有無 第二セクションにはエラーの原因 第三セクションには、定義域エラーの場合でエラーが発見された数学関数のID (※関数が無ければ-1) が数値で記録される。 < 第一セクション > 0 : エラーなし 1 : エラーあり < 第二セクション > -1 : 下記のいずれにも当てはまらないエラー 0 : 0除算エラー 1 : 定義域エラー 2 : 規則エラー < 第三セクション > 定義域エラーが発見された数学関数のID (※当該関数が無い場合は-1)