数値演算の関数を35個提供するAppleScript Librariesです。
Cocoa Frameworkを呼び出して計算するよりも262倍、OSAXを呼び出して計算するよりも760倍遅いのですが、関数の数はたいへんに多いです。
スピードが遅い上に数百回連続で呼び出すとScript Editorがクラッシュする傾向があります(本当)。
run scriptコマンドでJavaScript(JXA)を呼び出して計算しているのですが、run script経由でJavaScript(JXA)を呼び出すのがこんなに危険だと思わなかったので、いっそJavaScript Coreを呼び出して実行してみてもよいのかもしれません(それでも高速にはならなさそうで)。
最初は「calcLib」というライブラリをJXAで試しに書いて、AppleScriptから呼び出せないかどうか実験してみたのですが、useコマンドでJXAのライブラリを指定したら「OSA言語が違うので呼び出せないよ」といったエラーになりました(AppleScript用語辞書を用意すれば複数のOSA言語間から利用できるのだと思います、まだやっていませんけれども)。
そのあとで作ったので「calcLibAS」という名前に。
AppleScript名:atan2をライブラリ呼び出しで計算する |
— Created 2018-06-06 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use mLib : script "calcLibAS" set aRes to calcAtan2(10, 20) of mLib |
本ライブラリは~/Library/Script Librariesフォルダなどに入れて呼び出してください。
AppleScript名:calcLibAS |
— Created 2018-06-06 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.5" use scripting additions use framework "Foundation" set a01Res to calcAbs(-10) of me –> 10 set a02Res to calcAcos(-1) of me –> 3.14159265359 set a03Res to calcAcosh(10) of me –> 2.993222846126 set a04Res to calcAsin(-1) of me –> -1.570796326795 set a05Res to calcAsinh(10) of me –> 2.998222950298 set a06Res to calcAtan(10) of me –> 1.471127674304 set a07Res to calcAtan2(10, 20) of me –> 0.463647609001 set a08Res to calcAtanh(0.5) of me –> 0.549306144334 set a09Res to calcCbrt(3) of me –> 1.442249570307 set a10Res to calcCeil(0.95) of me –> 1 set a11Res to calcClz32(1) of me –> 31 set a12Res to calcCos(1) of me –> 0.540302305868 set a13Res to calcCosh(1) of me –> 1.543080634815 set a14Res to calcExp(1) of me –> 2.718281828459 set a15Res to calcExpm1(-1) of me –> -0.632120558829 set a16Res to calcFloor(45.95) of me –> 45 set a17Res to calcFround(1.337) of me –> 1.337000012398 set a18Res to calcHypot({3, 4, 5}) of me –> 7.071067811865 set a19Res to calcImul(2, 5) of me –> 10 set a20Res to calcLog(10) of me –> 2.302585092994 set a21Res to calcLog10(2) of me –> 0.301029995664 set a22Res to calcLog1p(1) of me –> 0.69314718056 set a23Res to calcLog2(3) of me –> 1.584962500721 set a24Res to calcMax({1, 2, 3, 4, 6, 2, 10}) of me –> 10 set a25Res to calcMin({1, 2, 3, 4, 6, 2, 10, 0}) of me –> 0 set a26Res to calcPow(7, 2) of me set a27Res to calcRandom() of me set a28Res to calcRound(5.95) of me set a29Res to calcSign(0) of me –> -1/0/1 set a30Res to calcSin(pi / 2) of me –> 1 set a31Res to calcSinh(1) of me –> 1.175201193644 set a32Res to calcSqrt(2) of me –> 1.414213562373 set a33Res to calcTan(30) of me –> -6.405331196646 set a34Res to calcTanh(10) of me –> 0.999999995878 set a35Res to calcTrunc(13.37) of me –> 13 –数値の絶対値を返す on calcAbs(aNum as string) set aStr to "Math.abs(" & aNum & ")" return (run script aStr in "JavaScript") end calcAbs –アークコサインをラジアン単位で返す on calcAcos(aNum as string) set aStr to "Math.acos(" & aNum & ")" return (run script aStr in "JavaScript") end calcAcos –ハイパーボリックアークコサインを返す on calcAcosh(aNum as string) set aStr to "Math.acosh(" & aNum & ")" return (run script aStr in "JavaScript") end calcAcosh –アークサインをラジアン単位で返す on calcAsin(aNum as string) set aStr to "Math.asin(" & aNum & ")" return (run script aStr in "JavaScript") end calcAsin –ハイパーボリックアークサインを返す on calcAsinh(aNum as string) set aStr to "Math.asinh(" & aNum & ")" return (run script aStr in "JavaScript") end calcAsinh –アークタンジェントをラジアン単位で返す on calcAtan(aNum as string) set aStr to "Math.atan(" & aNum & ")" return (run script aStr in "JavaScript") end calcAtan –アークタンジェントを返す on calcAtan2(aNum as string, bNum as string) set aStr to "Math.atan2(" & aNum & ", " & bNum & ")" return (run script aStr in "JavaScript") end calcAtan2 –ハイパーボリックアークタンジェントを返す on calcAtanh(aNum as string) set aStr to "Math.atanh(" & aNum & ")" return (run script aStr in "JavaScript") end calcAtanh –引数として与えた数の立方根を返す on calcCbrt(aNum as string) set aStr to "Math.cbrt(" & aNum & ")" return (run script aStr in "JavaScript") end calcCbrt –引数として与えた数以上の最小の整数を返す on calcCeil(aNum as string) set aStr to "Math.ceil(" & aNum & ")" return (run script aStr in "JavaScript") end calcCeil –引数として与えた数以上の最小の整数を返す on calcClz32(aNum as string) set aStr to "Math.clz32(" & aNum & ")" return (run script aStr in "JavaScript") end calcClz32 –引数として与えた数のコサインを返す on calcCos(aNum as string) set aStr to "Math.cos(" & aNum & ")" return (run script aStr in "JavaScript") end calcCos –引数として与えた数のハイパーボリックコサインを返す on calcCosh(aNum as string) set aStr to "Math.cosh(" & aNum & ")" return (run script aStr in "JavaScript") end calcCosh –Ex を返す。ここでの x は引数、E は、自然対数の底であるネイピア数(オイラー数) on calcExp(aNum as string) set aStr to "Math.exp(" & aNum & ")" return (run script aStr in "JavaScript") end calcExp –ex – 1 を返す。x は引数で、e は自然対数の底 on calcExpm1(aNum as string) set aStr to "Math.expm1(" & aNum & ")" return (run script aStr in "JavaScript") end calcExpm1 –引数として与えた数以下の最大の整数を返す on calcFloor(aNum as string) set aStr to "Math.floor(" & aNum & ")" return (run script aStr in "JavaScript") end calcFloor –引数として与えた数の最も近い単精度 floatを返す on calcFround(aNum as string) set aStr to "Math.fround(" & aNum & ")" return (run script aStr in "JavaScript") end calcFround –引数の二乗和の平方根を返す on calcHypot(aList as list) set bStr to retArrowText(aList, ", ") of me set aStr to "Math.hypot(" & bStr & ")" return (run script aStr in "JavaScript") end calcHypot — 2 つの引数をとり、C 言語の様な 32 ビット乗算の結果を返す on calcImul(aNum as string, bNum as string) set aStr to "Math.imul(" & aNum & ", " & bNum & ")" return (run script aStr in "JavaScript") end calcImul — 引数として与えた数の自然対数 (底は e) を返す on calcLog(aNum as string) set aStr to "Math.log(" & aNum & ")" return (run script aStr in "JavaScript") end calcLog — 引数として与えた数に対して、10を底とする対数を返す on calcLog10(aNum as string) set aStr to "Math.log10(" & aNum & ")" return (run script aStr in "JavaScript") end calcLog10 — 引数として与えた数と 1 の合計の自然対数(底 e)を返す on calcLog1p(aNum as string) set aStr to "Math.log1p(" & aNum & ")" return (run script aStr in "JavaScript") end calcLog1p — 引数として与えた数の2を底とする対数を返す on calcLog2(aNum as string) set aStr to "Math.log2(" & aNum & ")" return (run script aStr in "JavaScript") end calcLog2 –引数として与えた複数の数の中で最大の数を返す on calcMax(aList as list) set bStr to retArrowText(aList, ", ") of me set aStr to "Math.max(" & bStr & ")" return (run script aStr in "JavaScript") end calcMax –引数として与えた複数の数の中で最小の数を返す on calcMin(aList as list) set bStr to retArrowText(aList, ", ") of me set aStr to "Math.min(" & bStr & ")" return (run script aStr in "JavaScript") end calcMin –引数として与えた複数の数の中で最小の数を返す on calcPow(aNum as string, bNum as string) set aStr to "Math.pow(" & aNum & ", " & bNum & ")" return (run script aStr in "JavaScript") end calcPow –(0以上、1未満)の範囲で浮動小数点の擬似乱数を返す on calcRandom() set aStr to "Math.random()" return (run script aStr in "JavaScript") end calcRandom –引数として与えた数を四捨五入して、もっとも近似の整数を返す on calcRound(aNum as string) set aStr to "Math.round(" & aNum & ")" return (run script aStr in "JavaScript") end calcRound –引数として与えた数が正、負、0 のどれであるか示す符号を返す on calcSign(aNum as string) set aStr to "Math.sign(" & aNum & ")" return (run script aStr in "JavaScript") end calcSign –引数として与えた数のサイン(正弦)を返す on calcSin(aNum as string) set aStr to "Math.sin(" & aNum & ")" return (run script aStr in "JavaScript") end calcSin –引数として与えた数のハイパーボリックサインを返す on calcSinh(aNum as string) set aStr to "Math.sinh(" & aNum & ")" return (run script aStr in "JavaScript") end calcSinh –引数として与えた数の平方根を返す on calcSqrt(aNum as string) set aStr to "Math.sqrt(" & aNum & ")" return (run script aStr in "JavaScript") end calcSqrt –引数として与えた数のタンジェントを返す on calcTan(aNum as string) set aStr to "Math.tan(" & aNum & ")" return (run script aStr in "JavaScript") end calcTan –引数として与えた数のハイパーボリックタンジェントを返す on calcTanh(aNum as string) set aStr to "Math.tanh(" & aNum & ")" return (run script aStr in "JavaScript") end calcTanh –引数として与えた数の小数部の桁を取り除いて整数部を返す on calcTrunc(aNum as string) set aStr to "Math.trunc(" & aNum & ")" return (run script aStr in "JavaScript") end calcTrunc –Sub Routines –リストを指定デリミタをはさんでテキスト化 on retArrowText(aList, aDelim) –自分のASでよく使うハンドラ名称なので、同じものを用意 set anArray to current application’s NSArray’s arrayWithArray:aList set aRes to anArray’s componentsJoinedByString:aDelim return aRes as text end retArrowText (* –run scriptコマンドに問題が出た場合にはJavaScriptCoreなどで実行してもよさそう on run script aStr in osaLangName display dialog aStr end run script *) |
More from my site
(Visited 135 times, 1 visits today)