はじめに
諸般の流れから日本語プログラミング言語Mindで固定小数点計算機能を書いてみようかなと思い立ち、Mind開発者の@killyさんからMind8に倍精度整数があると伺ったのだけを手掛かりにほぼ手探りで使ってみましたの続報です。
お題のソースコード
int32は 変数。
int64は 倍精度変数。
メインとは
int32に 2147483647を 入れ
int32を 数値表示し 改行し
int32を NOTし 数値表示し 改行し
int32を 1だけ 左シフトし 数値表示し 改行し
int32を 1だけ 右シフトし 数値表示し 改行し
改行し
07fffffffHHと 00000FFFFHを 無処理し 文字列情報合成し int64に 入れ
int64を $$倍精度表示し 改行し
int64を NOTし $$倍精度表示し 改行し
int64を 1だけ 左シフトし $$倍精度表示し 改行し
int64を 1だけ 右シフトし $$倍精度表示し 改行し
改行し
int32を ダブル表示し 改行し
int32を NOTし ダブル表示し 改行し
int32を 1だけ 左シフトし ダブル表示し 改行し
int32を 1だけ 右シフトし ダブル表示し 改行し
改行し
int64を $$クアド表示し 改行し
int64を NOTし $$クアド表示し 改行し
int64を 1だけ 左シフトし $$クアド表示し 改行し
int64を 1だけ 右シフトし $$クアド表示し 改行。
今回は「$$倍精度表示」という単語を発見したので使ってみました。なるべく正の大きい数字(15桁)となるよう入力値を調整しました。32bit整数をダブルワード表示する単語も発見したので、併せて比較表示しています。
実行結果
では実行してみましょう。
C:\pmind\sample>decimal2.exe
2147483647
-2147483648
-2
1073741823
281472829227007
281472829227008
281474976710654
281471755485183
7FFFFFFF
80000000
FFFFFFFE
3FFFFFFF
7FFFFFFF|0000FFFF
80000000|0000FFFF
FFFFFFFE|0000FFFF
3FFFFFFF|0000FFFF
C:\pmind\sample>
おおっ15桁の32bit超の整数が表示されました。40bitは使っている感じ。
シフト処理単語は、推定「倍精度右シフト」とかあるのかないのか、Mindのインストールフォルダを「シフト」でgrepしてみましたがなさそうでした。
実装目的は10進数の固定小数点で小数部4桁10000倍なので、シフトはなくてもなんとかなるのかもしれません。
追記
少し固定小数点ライブラリのイメージを具体化してみると、インターフェースは小数点付き数字文字列なので、ピリオド位置が4桁未満なら右側に4桁まで0埋めしてからピリオド除去し、それをクァッドワード文字列に置換して倍精度整数にして、倍精度整数で演算して、元の小数点形式の文字列に復元して返すという感じになりそうなので10000倍自体もいらなさそうですね。
つづく
しばらくつづきます
この記事内容の作業環境
Windows11 Pro 22H2
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz
Mind Version 8.0.08 for Windows