お昼時ですね。こんにちは、松下です。本日は続けて拙作の多倍長浮動小数演算ライブラリ、
まず多倍長演算ライブラリとは何かと申しますと、通常JavaScriptで使用できる数字はせいぜい15桁(=252)なのですが、これを何とかして何桁でも計算できるようにするライブラリのことです。「何とかして」というのは具体的にどうするのかと言いますと、
JavaScriptの仕様上の限界である15桁と言えば100兆くらいですので、通常は全く問題が無いのですが、確率計算を行う場合には0.999999999999999999992230000などといった計算になることがあり、これを15桁で切ってしまうと130000となるので計算の意味がありません。つまり
多倍長演算は日常的には必要が無いとは言えいくらかの需要があるはずで、実際に検索してみると色々とライブラリが出てくるわけです。しかしどのライブラリの説明を見てもとっつきづらく、使い方もダウンロード先も良く分からないので結局自分で作ってみることになりました。
つまり、この
ところで実はPHPなら標準でその多倍長演算機能がついているのですが、PHPはサーバーサイドスクリプトですので、入力された数によってはサーバー負荷が恐ろしいことになります。そのため、今回は実用上の安全性を考慮してユーザー側のPC上で計算を行うJavaScriptのライブラリを用意しました。累乗の基数と指数の設定によっては過負荷でブラウザがフリーズすることがありますが、予めご容赦ください。
なお、JavaScriptやアルゴリズムの勉強を碌にせずに必要なところだけ調べながら作ってますので、構造や文法が拙いのはそのあたりが原因です。
サンプルスクリプト
ダウンロード
SLiMPNC 4J本体 : 銑鉄網内dlディレクトリ- このページのサンプルスクリプト : h2s内jsディレクトリ
使い方
MPadd(parameter0:String, parameter1:String, essentialfigure:int or '')
多倍長加算関数です。
parameter0 + parameter1の結果をString形式で返します。
parameter0及びparameter1はString形式で入力する必要があります。
essentialfigureで有効数字の桁数を指定できます。指定が無い場合は全桁を返します。
使用例 : answer = MPadd('9999999999999999.9', '888888888888888.888888');
MPsub(parameter0:String, parameter1:String, essentialfigure:int or '')
多倍長減算関数です。
parameter0 – parameter1の結果をString形式で返します。
parameter0及びparameter1はString形式で入力する必要があります。
essentialfigureで有効数字の桁数を指定できます。指定が無い場合は全桁を返します。
使用例 : answer = MPsub('9999999999999999.9', '888888888888888.888888');
MPmul(parameter0:String, parameter1:String, essentialfigure:int or '')
多倍長乗算関数です。
parameter0 x parameter1の結果をString形式で返します。
parameter0及びparameter1はString形式で入力する必要があります。
essentialfigureで有効数字の桁数を指定できます。指定が無い場合は全桁を返します。
使用例 : answer = MPmul('9999999999999999.9', '888888888888888.888888', 30);
MPdiv(parameter0:String, parameter1:String, essentialfigure:int or '')
多倍長除算関数です。
parameter0 x parameter1の結果をString形式で返します。
parameter0及びparameter1はString形式で入力する必要があります。
essentialfigureで有効数字の桁数を指定できます。指定が無い場合は15桁で丸めて返します。
使用例 : answer = MPdiv('9999999999999999.9', '888888888888888.888888', 30);
MPpow(parameter:String, power:String, essentialfigure:int or '')
多倍長累乗関数です。
parameterpowerの結果をString形式で返します。
parameter及びpowerはString形式で入力する必要があります。
指数は整数にしか対応していませんので、小数で入力しても自動的に切り捨てます。
parameter100=(parameter10)10などと自動的に分解して計算するため、parameterの桁が少ない場合はある程度高速に動きますが、parameterが数万桁に及ぶ場合はその桁の処理が膨大なため過負荷に陥るという難点があります。保持データを現状の全桁文字列から浮動小数点オブジェクトに改めることで改善できそうですが、全部の関数を書き直す必要があるため今のところ対応していません。
essentialfigureで有効数字の桁数を指定できます。指定が無い場合は15桁で丸めて返します。
使用例 : answer = MPpow('0.999999999999999999999999', '300000', 30);
MPesrnd(parameter:String, essentialfigure:int)
多倍長有効数字丸め関数です。
parameterを有効数字essentialfigure桁で丸めてString形式で返します。丸め演算は四捨五入です。
丸め専用の関数なのでessentialfigureの入力は必須です。
使用例 : answer = MPpow('0.999999999999999999999999', '300000', 30);
MPabscomp_simple(parameter0:String, parameter1:String)
多倍長正整数文字列の絶対値を比較する関数です。
parameter0とparameter1を比較して、paramter0が大きければ0を、parameter1が大きければ1をint形式で返します。
多倍長除算の補助関数ですので、計算負荷を軽減するため小数や負の数には対応していません。
使用例 : answer = MPabscomp_simple('32248', '32837');
getInt(searchid:String)
HTMLページのDOMツリーからint形式で内容を取得する関数です。
id=searchidとなる要素のvalueの内容を取得します。inputタグなどから取得するのを想定しています。
返り値がint形式のため、15桁を超える数には対応できません。
使用例 : parameter[0] = getInt('form_input0');
getIntString(searchid:String)
HTMLページのDOMツリーからString形式で内容を取得する関数です。
id=searchidとなる要素のvalueの内容を取得します。inputタグなどから取得するのを想定しています。
String形式のため、取得できる桁数の制限はありません。
返り値がStringの内容が小数である場合、自動的に小数点以下を削って整数化します。
使用例 : parameter[0] = getIntString('form_input0');
getFloat(searchid:String)
HTMLページのDOMツリーからfloat形式で内容を取得する関数です。
id=searchidとなる要素のvalueの内容を取得します。inputタグなどから取得するのを想定しています。
返り値がfloat形式のため、15桁を超える数には対応できません。
使用例 : parameter[0] = getFloat('form_input0');
getFloatString(searchid:String)
HTMLページのDOMツリーからString形式で内容を取得する関数です。
id=searchidとなる要素のvalueの内容を取得します。inputタグなどから取得するのを想定しています。
返り値がString形式のため、取得できる桁数の制限はありません。
使用例 : parameter[0] = getFloatString('form_input0');
correctNumberString(text:String)
textの中身を数字として整理整頓する関数です。
数字、負号、小数点以外全ての文字を削除し、半角に統一します。また、小数の末尾についた0を削除します。
返り値はString形式になります。
主にユーザーが入力しうる全角・半角混じりの文字列を正規化するために使用します。ユーザー入力変数を演算関数に入れる前に一旦この関数に突っ込んで整理しておくと比較的安全に動作します。上記getInt~getFloatStringは全て自動的にcorrectNumberStringを実行するため、再度この関数を実行する必要はありません。
先頭以外の負号や2つ目以降の小数点といったイレギュラーには未対応です。
使用例 : parameter = correctNumberString('-389.2658024846425000');
MPparseint(parameter:String)
String型数字parameterを整数化する関数です。
単純に小数点以下を切り捨てて整数化したものをString型で返します。
使用例 : parameter = MPparseint('-344.73');
MPshortstyle(parameter:String, essentialfigure:int or '', xstyle:String or '', powstyle_start:String or '', powstyle_end:String or '')
String型数字parameterをm×10nスタイルに成型する関数です。
初期値ではm×10<sup>n</sup>になりますが、'×'をxstyle、'<sup>'をpowstyle_start、'</sup>'をpowstyle_endで置き換えることが出来ます。
返り値はString形式になります。
essentialfigureで有効桁数を指定できます。指定しない場合は15桁で丸められます。
使用例 : parameter = MPshortstyle('-0.0000007776338002739722');
fit_digit(parameter:String, displaydigit:int, digitlimit:int)
String型数字parameterを桁数に応じてm×10nスタイルに成型する関数です。
有効桁数をdisplaydigit、有効桁前後の0や小数点を合わせた文字数の限界をdisplaydigitで指定します。
処理としては最初にdisplaydigitの桁数で丸め、その結果String型数字の文字数がdigitlimitを超える場合にm×10nスタイルに成型します。
要するにページ上の限られたスペースに収まるように数字を成型します。
使用例 : result = fit_digit('34588370000000000000000000000000000');
ピンバック: トレパク疑惑確度計算ツール CTraPS | 松下響の天輪返し
ピンバック: 無断転載等の著作物無断複製利用問題FAQ | 松下響の天輪返し