固定小数点演算コモン β版
作成者 天樹

本日は、固定小数点演算コモンをDLしていただき、誠にありがとうございます。
この中では、諸注意と、説明書きを行いたいと思います。

このコモンファイルはコモンイベント集の基本ルールに則って利用してOKです。

また、未だβ版なので、計算が狂う場合がありますので、必ず確認をしてください。おかしい計算が出た場合は、コメント欄に計算式を記入してバグが出たと書いてくだされば確認し次第対応させていただきます。
この説明書きが分かりずらい場合もコメントしてください。

さて、これくらいで注意喚起とお願いを終わりにして、説明書きに移行します。

 1.小数の表記法

まず、このコモンでは、小数の表記の仕方についてのルールが定まっています。
連続した変数(変数呼び出し値が連続していることが条件です)を使って次のように表します。
例として、2000000(通常変数0番)と2000001(通常変数1番)に固定小数点で表記する場合、通常変数0に整数部分、通常変数1に小数部分を入れます。
この時、整数部分は9桁まで(安全を見積もって)、小数部分には4桁で入力してください。
例. 12345.6789を表記するなら、

通常変数0 通常変数1 
12345 6789

このとき、小数部分が4桁未満の場合は、小数部分を4桁になるように10でかけ続けてください。
例. 12345.678を表記するなら
通常変数0 通常変数1 
12345 6780

また、この値が負の場合、少し大変な処理を行います。

例. -12345.6789
通常変数0 通常変数1 
-12345 6789

と、通常ならば整数部分にマイナスを格納するのですが、

例. -0.1234
通常変数0 通常変数1 
0

-1234


というように、整数部分が0の場合は、小数点部分にマイナスを格納します。

以上のルールに則って次の作業に移ります。

 2.変数の呼び出し法

ウディタでは、コモンイベントの変数入力では、変数を呼び出せるようになっていますが、このコモンにとっては迷惑なことです(泣)
ですので、変数入力に入れる変数に、固定小数点変数の呼び出し値を代入します。

さて、コモンイベントでは、入力変数が4つ定められています。

入力1 戻り値を格納する変数の整数値の呼び出し値 を格納した変数。
入力2 要素1を格納する変数の整数値の呼び出し値 を格納した変数。
入力3 要素2を格納する変数の整数値の呼び出し値 を格納した変数。
入力4 演算子を決められます。

なので、通常変数0,1に戻り値、通常変数2,3に要素1、通常変数4,5に要素2を代入して、セルフ変数0〜2に呼び出し値を記録すると、

セルフ変数0 セルフ変数1 セルフ変数2 
2000000 2000002 2000004

そして、このセルフ変数を入力変数に入れればOKです。

代入先 要素1 要素2 
1100000 1100001 1100002

さて、入力4に関してです。

この演算子は要素1と要素2に対して計算を行って、代入先に代入するわけですが、例えば+であれば、代入先=要素1+要素2という形で行うわけです。
演算子*は掛け算、/は割り算を表しています。

その割り算が曲者です。
このコモンイベントには2種類の割り算コマンドを用意しました。

1(5+4桁高精度演算)型。

これは一番正確に割り算を実行するルーチンですが、その代わり10万以上の数に対応していません
筆算の方法を正確に真似ることで精度を確保しました。
この計算手法には、x/y=x*10000/y*10000ということが根底にあります。

2(逆数型可変精度演算)型。

これは数学の得意な親友のおかげで作られた、要素1がどのような値にも対応できる方式の割り算です。
ただし、こちらの弱点は、要素2が10000以上は根本的に無理な上、要素2が大きくなるほど精度が下がるという欠点があります。
逆に要素2が小さくなるほど精度が上がるということが言えます。
この計算手法には、x/y=x*(1/y)ということが根底にあります。

最後に

重ねて言いますが、バグが払しょくできたとは言い難いのですが、頑張ってバグつぶしして(乱数を用いて変数を自動で決めて、CSV出力してExcelでチェックした)もう見つからなかったので、UPしました。

実は部活の卒業論文にこれの反応を書こうかなと思っていますので、コメントを残してくれると本当にうれしいです。