HideMath.dll(Ver9.35対応版)
目次−
浮動小数点数モード−
HideMath.dll
1.HideMath.dllとは
HideMath.dllは、浮動小数点数モードで呼び出して使う、科学技術演算用の関数ライブラリーです。
浮動小数点数版で、setfloatmodeで浮動小数点数モードにして呼び出して使うことにより、各種の科学技術演算が出来ます。
JavaScriptであれば、hidemaru.loadDllによって、どのエディションからでも呼ぶことができます。
2.使い方
マクロのloaddll文やdllfunc関数を使って呼び出して使います。
HideMath.dllは標準添付されています。
普通の秀丸エディタから呼び出して使うことは出来ません。
loaddllをした時点でエラーになります。
JavaScriptであれば、hidemaru.loadDllによって、どのエディションからでも呼ぶことができます。
マクロからの基本的な呼び出し方は、以下のようになります。
setfloatmode 1; //浮動小数点数モードにする
loaddll "hidemath.dll";
if( !result ) {
message "hidemath.dllのロードに失敗しました。";
endmacro;
}
...
... hidemath.dllを使った処理
...
マクロの最後に
freedll;
を入れておくとなおいいですが、無くても特に支障はありません。
HideMath.dllが提供している関数は、dllfunc関数を使って呼び出せばいいです。例えば絶対値を返す関数である"Abs"を呼ぶには、
#a = dllfunc( "Abs", #a );
と呼び出せばいいです。ほとんどの関数はこのような形になりますが、"Pi"等、パラメータの数が変わってくる物もあります。
また、"Format"関数だけは、文字列型の値を返すので、dllfuncstr関数を使って呼び出すことになります。例えば、
$a = dllfuncstr( "Format", "%lE", #a );
message "結果 = " + $a;
のように呼び出すことになります。
関数名は大文字/小文字が区別されるので、例えばAbs関数を呼ぶ場合は正しく"Abs"と指定しないといけないです。"abs"や"ABS"で呼び出そうとするとエラーになってマクロの実行が中断します。
3.関数リファレンス
●Sin,Cos,Tan,Asin,Acos,Atan,Atan2,Sinh,Cosh,Tanh
いわゆる三角関数のsin,cos,tanと、逆三角関数(アークサイン、…)、ハイパボリック関数(sinh,cosh,tanh)です。
#a = dllfunc( "Sin", 3.14159 / 2 );
のように使います。
Atan2は、パラメータが2つあります。
Atan2( x, y )は、Atan( x / y ) に相当します。
yの値が0の場合でも正しく値を返します。
#a = dllfunc( "Atan2", #x, #y );
のように使います。
●Pi
Piは、いわゆるパイの値を返します。パイの値は3.14159…となります。
#pi = dllfunc( "Pi" );
のように呼び出して使います。
●Abs
Absは、絶対値を返します。
#n = dllfunc( "Abs", #n );
のように使います。
●Ceil, Floor
Ceilは、小数点以下を切り上げた整数を返します。
#n = dllfunc( "Ceil", #n );
のように使います。
Floorは、逆に小数点以下を切り捨てた整数を返します。
ちなみに四捨五入を計算するには
#n = dllfunc( "Floor", #n + 0.5 );
とすればいいです。
●Exp, Log, Log10
Expは、いわゆる指数(エクスポーネンシャル)を計算します。
Logは、いわゆる自然対数(ナチュラルロガリズム)を計算します。
Log10は、10を基数とする対数を計算します。(だったっけかな?)
#n = dllfunc( "Log", 10 );
●Sqrt
Sqrtは、いわゆる平方根(square root)を計算します。
#n = dllfunc( "Sqrt", 2 );
●Pow
Powは、べき乗(xのy乗)を計算します。
#n = dllfunc( "Pow", #x, #y )
上記の例は、#xの#y乗を計算して#nに代入しています。
●Random、Randomize
Randomは、疑似乱数を生成し、生成した値を返します。
Randomizeは、パソコンの内部時計を使って疑似乱数生成のための初期値を狂わせます。これ自体も関数ですが、返す値は常に0です。
乱数を得たい場合には、まず、Randomize関数を最低1回呼んで、その後Random関数を使って乱数を得るようにしてください。
例:
#dummy = dllfunc( "Randomize" );
#rand = dllfunc( "Random" );
Random関数の返す値の範囲は0から32767です。
●Bessel_xxxx関数
Bessel系関数(って何か知らないけど)です。
Bessel_j0(x)
Bessel_j1(x)
Bessel_jn(n,x)
Bessel_y0(x)
Bessel_y1(x)
Bessel_yn(n,x)
があります。
例:
message "j0(2.387) = " + str( dllfunc( "Bessel_j0", 2.387 ) );
●Format
Formatは、いわゆるC言語のsprintfを使って浮動小数点数を文字列に変換します。
$s = dllfuncstr( "Format", "%lf", #n );
のように使います。dllfuncstr関数での2番目のパラメータがフォーマット文字列となります。
Formatは、1つの数値の変換しか出来ません。例えば
$s = dllfuncstr( "Format", "%lf lf", #n1, #n2 );
のような使い方は出来ませんのでご注意ください。
フォーマット文字列の指定方法の例を以下に挙げます。
"%le" ... 1.234e+2 のような形式(仮数部+指数部の形式)
"%lf" ... 123.456 のような形式
"%.5lf ... 小数点以下5桁まで表示
JavaScriptの場合は、Mathオブジェクトと大差はありませんが、Formatを使うことができます。
例 |
newfile;
js {
var hidemath = loaddll("hidemath.dll").dllFunc;
var Pi=hidemath.Pi();
function insertCalc(s){
insert( s+" = "+eval(s)+"\n");
}
insertCalc("Math.PI");
insertCalc("hidemath.Pi()");
insertCalc("hidemath.Sin(Pi/2)");
insertCalc("hidemath.Cos(Pi)");
insertCalc("hidemath.Tan(Pi/4)");
insertCalc("Math.tan(Pi/4)");
insertCalc("hidemath.Asin(1)");
insertCalc("hidemath.Acos(1)");
insertCalc("hidemath.Atan(1)");
insertCalc("hidemath.Atan2(1,0)");
insertCalc("hidemath.Pi()");
insertCalc("hidemath.Abs(-123)");
insertCalc("hidemath.Ceil(1.23)");
insertCalc("hidemath.Floor(1.23)");
insertCalc("hidemath.Exp(1)");
insertCalc("hidemath.Log(256)/hidemath.Log(2)");
insertCalc("hidemath.Log10(100)");
insertCalc("hidemath.Sqrt(2)");
insertCalc("hidemath.Pow(2,8)");
hidemath.Randomize();
insertCalc("hidemath.Random()");
insertCalc("hidemath.dllFuncStr.Format('%lE',Pi)");
insertCalc("hidemath.dllFuncStr.Format('%1.3f',Pi)");
insertCalc("hidemath.dllFuncStr.Format('%1.03f',1.1)");
insertCalc("hidemath.dllFuncStr.Format('%07.2f',Pi)");
}
endmacro;
|