_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ mod_fx _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 【作者】 : motchy 【最終更新】 : 2015/9/5 【バージョン】 : 5.1.0 【動作確認環境】 : Hot Soup Processor 3.4 以降 (※最新版を推奨) 【開発環境】 : Hot Soup Processor 3.4 -------------------------------------------------------------------------------------------------------------------------------------------- < 概要 >  文字列で表現された数式の値を求めるモジュールです。 四則演算は勿論、一般的な数学関数、さらに論理演算もサポートします。 HSP標準命令のみで構成されており、DLLを必要としません。 ※hsp3dish ではモジュール変数機能とポインタ機能が充実していないので本モジュールは使えません。(2015/08 現在) -------------------------------------------------------------------------------------------------------------------------------------------- < 使い方 > READMEには書ききれないので manual.html にまとめています。そちらをご覧ください。 チュートリアルは是非ご覧ください。 -------------------------------------------------------------------------------------------------------------------------------------------- < 仕様 > < 数式の文法 > < トークン長 > 1トークンの長さの最大は127バイト < 大文字と小文字について > 大文字と小文字は区別される。 < 数学定数 > 次の数学定数はあらかじめ定義されている。 m_pi : 円周率。3.141592653589793。 m_e : ネイピア数。2.718281828459045。 < 変数 > 変数名には次の規則がある。 ■ 長さが127バイト以下 ■ 先頭が半角数字でない ■ 括弧,2項演算子と同じ名前が含まれない ■ 予約語と一致しない  変数は8999個まで定義できる。多次元配列も可能で、最大で4次元まで。配列の次元,要素数の拡張は不可能。 添え字の記法はHSPと同じ。例えば x(2,3) 。但し () の代わりに [],{} を用いても良い。  新たに定義される変数には0以上のIDが割り振られる。空きIDのうち最も若いものが割り当てられる。 また、定義時には変数の内容は0で初期化される。  変数の内容を書き換えただけなら既に登録されている数式を再コンパイルする必要はない。 (これを利用して数学グラフ等を高速に描ける)  ある変数xの定義を解除した後に、別の変数yを定義してから変数xを再定義した場合はxのIDは変化するので、 変数xを含む、以前の数式は再コンパイルする必要がある。つまり再登録手続きが必要である。 < 利用できる演算子と優先順位 > < 演算優先順位 > C言語に倣った優先順序である。 < 1 > () : 演算順序制御 < 2 > 非配列変数名 : 非配列変数の内容参照 配列変数名 : 配列の要素参照 関数名 : 関数呼び出し < 3 > * : 乗算 / : 除算 % : 剰余 \ : 剰余 < 4 > + : 加算 - : 減算 < 5 > << : 左ビットシフト >> : 右ビットシフト < 6 > < : 小なり <= : 小なりイコール > : 大なり >= : 大なりイコール < 7 > = : 等価 == : 等価 ! : 不等価 != : 不等価 < 8 > & : ビット積 < 9 > ^ : ビット排他的論理和 < 10 > | : ビット和 < 11 > , : デリミタ < 備考 > ■ 同じ優先順位の演算子が並んでいる場合は左にあるものほど順位が高い。 ■ <,>,<=,>= について。例えば a < b が真であれば a < b が double(1) に置き換えられる。   偽であれば 0 に置き換えられる。 ==,=,!=,= も同様。 < ()について > () は次の用途で用いられる。 ■ 優先順序制御 ■ 配列の添え字 ■ 関数のパラメータ () の代わりに {},[] を用いてもよい。モジュール内部では () と同じものとして扱われる。 < 特殊な規則 > ■ 任意の位置に半角スペースを入れてよい。 < 備考 > * \ / の右隣に + - を置いても構わない。  (例)   3*-2 ← OK   3*(-2) ← OK   コンパイル結果は同じになる。 < 関数 > < 利用できる関数 > sin : 正弦 cos : 余弦 tan : 正接 asin : 逆正弦。asin(u)。 acos : 逆余弦。acos(u)。 atan : 逆正接。atan(y,x)。HSPのatanと同じ。 sinh : 双曲線余弦 cosh : 双曲線余弦 tanh : 双曲線正接 asinh : 双曲線逆正弦 acosh : 双曲線逆余弦 atanh : 双曲線逆正接 sqrt : 正の平方根 exp : 指数値。eのx乗。 pow : 累乗。powf(底,指数)。 log : 対数。log(底,真数)。 ln : 自然対数 log10 : 常用対数 limit : 制限。limit(ターゲット,下限,上限)。HSPのlimitfと同じ。 abs : 絶対値 floor : 床関数 round : 四捨五入 ceil : 天井関数 int : 0の方向に丸める。HSPのint()と同じ。 sgn : 符号関数 factorical : 階乗 deg2rad : 度数法から弧度法へ変換 rad2deg : 弧度法から度数法へ変換 < 数式処理 > < 前提 > ■内部的にはすべての数を64bit精度実数値に拡張して扱う。 ビット演算等、整数値に対してのみ有効な演算は、オペランドが整数値の場合に限り実行される。 もしオペランドが実数値であればエラーとして扱われる。 ■数式は逆ポーランド記法に変換されて管理される。 < エラーコード > < mfx_newFml におけるエラーコード > エラーコードを格納する変数を E とすると、Eは要素数2の1次元整数型配列変数であり、 エラーコードは配列要素(0),(1)によって、2セクションに分けられている。 < 第1セクション > エラーが発見されたトークンのインデックス < 第2セクション > エラーの原因 0 : 式全体が空文字列である。 10 : 不明なトークン 11 : トークンが長すぎる 15 : そこに存在してはいけないトークンがある 16 : 式が正しく終わっていない 17 : 無駄な , がある 20 : ( が閉じられていない 21 : ) 過多 30 : 関数のパラメータ不足 31 : 関数のパラメータ過多 40 : 配列の添え字が無い 41 : 配列でない変数に添え字が付いている 42 : 配列の添え字不足 43 : 配列の添え字過多 50 : その他 < mfx_calc におけるエラーコード > エラーコードを格納する変数を E とすると、Eは要素数2の1次元整数型配列変数であり、 エラーコードは配列要素(0),(1),(2)によって、3セクションに分けられている。 < 第1セクション > 0 : 正常終了 1 : 数式未選択 2 : システムエラー 3 : 数学的エラー < 第2セクション > エラーの種類。第1セクションが 2,3 の場合に意味を持つ。 1 : 未定義の変数 2 : 配列の添え字が非負整数でない 3 : 配列の確保済み領域外への参照 10 : 非整数に対するビット演算 11 : 非整数に対する整数用演算 15 : 0除算 20 : 関数の定義域逸脱 < 第3セクション > 第2セクションが 2,3,10,20 の場合に意味を持つ。 (A) 第2セクションが 2,3 の場合 配列名を格納した文字列型変数へのポインタのintキャステド表現。 内容を確認するには次のようにする。 sdim buf,128 dupptr buf,エラーコードの第2セクション,128,2 dupptrの第4パラメータは vartype("str") としてもよい。 これで buf より変数名を読み出せる。 (B) 第2セクションが 10 の場合 演算子の種類 140 : | 160 : ^ 180 : & 240 : << 241 : >> (c) 第2セクションが 11,20 の場合 関数の種類 10000 : sin 10001 : cos 10002 : tan 10010 : asin 10011 : acos 10012 : atan 10020 : sinh 10021 : cosh 10022 : tanh 10030 : asinh 10031 : acosh 10032 : atanh 10100 : sqrt 10200 : exp 10220 : pow 10300 : log 10320 : ln 10330 : log10 10400 : limit 10600 : abs 10700 : floor 10720 : round 10740 : ceil 10760 : int 10800 : sgn 10900 : factorical 20000 : deg2rad 20001 : rad2deg さらに詳しい情報は design/design.txt に書かれています。 -------------------------------------------------------------------------------------------------------------------------------------------- < ライセンス > motchy が書いたソースコードと関連ファイルはMITライセンスに従います。 詳しくは LICENSE.txt を参照してください。 This software's source code and related files made by motchy are released under the MIT license, see LICENSE.txt. -------------------------------------------------------------------------------------------------------------------------------------------- < 作者連絡先 > grepon8492@gmail.com 不具合等、お気付きの点がありましたらお気軽にご連絡ください。 但し、対処する保証はありません。 -------------------------------------------------------------------------------------------------------------------------------------------- < 謝辞 > 手軽で多機能なプログラミング言語 Hot Soup Processor 開発者の皆様に感謝致します。 -------------------------------------------------------------------------------------------------------------------------------------------- < 更新履歴 > [ 2015/9/5 ] ver 5.1.0 ・計算におけるオペレーター処理のアルゴリズムを改良