日本語プログラミング言語Mind８で多倍長十進数計算

## 基本演算は、ほぼ出来ました。
事務処理用には、指定桁での切り捨て、切り上げ、四捨五入などを実装します。
科学技術計算用には、初等関数を実装できればと考えています。

メインソースは下記のとおりです。
サブプログラムのlnumsub01,lnumsub02は、[mind会議室](https://www.scripts-lab.co.jp/support/public/html/mind.cgi?tframe+035+-s+F001)のライブラリをご覧ください。
```
※タイトル 多倍長整数や小数をｍｉｎｄ独自で定義し計算する。
※　各計算結果は、 即座にＬ小数型に格納してください。
※
"lnumsub01"を　コンパイルする。  
"lnumsub02"を　コンパイルする。
グローバル。
Ｌ小数型は　文字列実体と　等価。
Ｌ小数情報は　文字列情報と　等価。

Ｌ小数？とは　（文字列　　→　合否）　
		文字列Ａは　文字列
		文字Ａは　ワード変数
		文字数Ａは　ワード変数
		小数点有は　ワード変数
	文字列Ａに　入れる
	小数点有を　クリアし
	文字列Ａの　左端文字が　'-'と　等しい
　　または
	文字列Ａの　左端文字が　'－'と　等しい
	または
	文字列Ａの　左端文字が　'+'と　等しい
	または
	文字列Ａの　左端文字が　'＋'と　等しい
		ならば　文字列Ａから　一文字切り出し　捨てる
		つぎに
	文字列Ａの　文字数を　文字数Ａに　入れる
	文字数Ａが　０と　等しい
		ならば　０を　返し　終わり
		つぎに
　　※左端の±記号を除いたあと、左右端も文字は数字（小数点は中間にしかない）
	文字列Ａの　左端文字を　一文字数値変換し　
　　　　偽？　ならば　捨て　０を　返し　終わり　
			  つぎに
	文字列Ａの　右端文字を　一文字数値変換し　
　　　　偽？　ならば　捨て　０を　返し　終わり
			  つぎに　　　
	文字数Ａ　回数指定し
		文字列Ａから　一文字右側切り出し　文字Ａに　入れる
		文字Ａが　'.'と　等しい
			ならば　小数点有　ならば　※　小数点'.'が２個以上あるとエラー
						０を　返し　終わり
					さもなければ
						小数点有を　セットし
					つぎに					
			さもなければ
				文字Ａを　一文字数値変換し　
　　　　　　　　偽？　ならば　捨て　０を　返し　終わり						
					つぎに
			つぎに
	繰り返す
 　１を　返す。

Ｌ大小とは　（Ｌ小数、Ｌ小数　→　-１／０／１）
		符号Ｃは　変数
		符号Ｄは　変数
		絶対値大小は　変数
	Ｋ小数に変換し　小数Ｄに　入れる
	Ｋ小数に変換し　小数Ｃに　入れる
	小数Ｃの　Ｋ符号を　符号Ｃに　入れる
	小数Ｄの　Ｋ符号を　符号Ｄに　入れる　
	小数Ｃと　小数Ｄの　Ｋ小数絶対値の大小比較を　絶対値大小に　入れる
	絶対値大小が　０と　等しい
		ならば　符号Ｃと　符号Ｄが　等しい
				または　
				小数Ｃが　Ｋゼロ？
　　　　　　		ならば　０を　返す　終わり
					つぎに
		つぎに
	絶対値大小が　-１と　等しい
　　　　ならば　符号Ｄに　-1を　掛け　返す
　　　　さもなければ　　　　　　　　
				符号Ｃを　返し
		つぎに。

Ｌ等しいとは　（Ｌ小数、Ｌ小数　→　０／１）
	Ｌ大小が　０と　等しい。

Ｌ異なるとは　（Ｌ小数、Ｌ小数　→　０／１）
	Ｌ大小が　０と　異なる。

Ｌ大きいとは　（Ｌ小数、Ｌ小数　→　０／１）
　　Ｌ大小が　１と　等しいこと。
	
Ｌ小さいとは　（Ｌ小数、Ｌ小数　→　０／１）
	Ｌ大小が　-１と　等しいこと。		

Ｌ以上とは　（Ｌ小数、Ｌ小数　→　０／１）
　　Ｌ大小が　０　以上であること。
	
Ｌ以下とは　（Ｌ小数、Ｌ小数　→　０／１）
	Ｌ大小が　０　以下であること。	

Ｌ大きい方とは
		入力小数Ａは　Ｌ小数情報
		入力小数Ｂは　Ｌ小数情報
	入力小数Ａと　入力小数Ｂに　入れる
	入力小数Ａが　入力小数Ｂより　Ｌ以上
		ならば　入力小数Ａを　返す
		さもなければ
				入力小数Ｂを　返す
		つぎに。

Ｌ小さい方とは
		入力小数Ａは　Ｌ小数情報
		入力小数Ｂは　Ｌ小数情報
	入力小数Ａと　入力小数Ｂに　入れる
	入力小数Ａが　入力小数Ｂより　Ｌ以上
		ならば　入力小数Ｂを　返す
		さもなければ
				入力小数Ａを　返す
		つぎに。
  
Ｌゼロ？とは　（Ｌ小数　→　０／１）
	Ｋ小数に変換し　Ｋゼロ？。	

Ｌゼロ以外？とは　（Ｌ小数　→　０／１）
	Ｋ小数に変換し　Ｋゼロ以外？。	

Ｌ正？とは　（Ｌ小数　→　０／１）
	Ｋ小数に変換し　Ｋ正？。	

Ｌ負？とは　（Ｌ小数　→　０／１）
	Ｋ小数に変換し　Ｋ負？。

Ｌ非負？とは　（Ｌ小数　→　０／１）
	Ｋ小数に変換し　Ｋ非負？。	
		
Ｌ加えとは　（Ｌ小数、Ｌ小数　→　Ｌ小数）
		Ｋ小数に変換し　小数Ｄに　入れる
		Ｋ小数に変換し　小数Ｃに　入れる
		小数Ｃと　小数Ｄの　Ｋ小数の加算結果を　Ｋ小数を文字列変換し　返す。

Ｌ引きとは　（Ｌ小数、Ｌ小数　→　Ｌ小数）
		Ｋ小数に変換し　小数Ｄに　入れる
		Ｋ小数に変換し　小数Ｃに　入れる
		小数Ｃと　小数Ｄの　Ｋ小数の減算結果を　Ｋ小数を文字列変換し　返す。

Ｌ掛けとは　（Ｌ小数、Ｌ小数　→　Ｌ小数）
		Ｋ小数に変換し　小数Ｄに　入れる
		Ｋ小数に変換し　小数Ｃに　入れる
		小数Ｃと　小数Ｄの　Ｋ小数の掛け算結果を　Ｋ小数を文字列変換し　返す。

Ｌ負数とは
		Ｋ小数に変換し　Ｋ負数を　Ｋ小数を文字列変換し　返す。

Ｌ絶対値とは
		Ｋ小数に変換し　Ｋ絶対値を　Ｋ小数を文字列変換し　返す。

Ｌ整数を掛けとは
		入力小数は　Ｌ小数情報
		乗数は　変数
		入力小数と　乗数に　入れる
		入力小数を　Ｋ小数に変換し　小数Ｃに　入れる
		小数Ｃの　乗数の　Ｋ整数と整数の掛け算結果を　Ｋ小数を文字列変換し　返す。

Ｌべき乗とは　　（Ｌ小数、Ｌ小数　→　Ｌ小数）
		入力小数は　Ｌ小数情報
		累乗数は　変数
		入力小数と　累乗数に　入れる
		入力小数を　Ｋ小数に変換し　小数Ｃに　入れる
		小数Ｃの　累乗数の　Ｋ小数の自然数乗を　Ｋ小数を文字列変換し　返す。

Ｌ平方根精度指定とは　　（Ｌ小数、精度　→　Ｌ小数）
		入力小数は　Ｌ小数情報
		精度は　　変数
		入力小数と　精度に　入れる
		入力小数を　Ｋ小数に変換し　小数Ｃに　入れる
		小数Ｃの　精度に　Ｋ小数の平方根精度指定を　　Ｋ小数を文字列変換し　返す。

Ｌ整数の商と余りとは　（Ｌ整数、Ｌ整数　→　Ｌ商、Ｌ余）
		入力分子は　Ｌ小数情報
		入力分母は　Ｌ小数情報
		Ｋ商情報は　構造体情報
		Ｋ余情報は　構造体情報
		出力商は　　Ｌ小数型 長さ　最大文字数
		出力余は　　Ｌ小数型 長さ　最大文字数
	入力分子と　入力分母に　入れる
	入力分子を　Ｋ小数に変換し　小数Ｃに　入れる
	入力分母を　Ｋ小数に変換し　小数Ｄに　入れる
	小数Ｃの　Ｋ小数桁数が　０より　大きい
	または
	小数Ｄの　Ｋ小数桁数が　０より　大きい
		ならば　改行し　「＜Ｌ整数の商と余りに小数はダメです！＞」と　表示し
				１を　０で　割る
		つぎに
　　小数Ｃと　小数Ｄの　Ｋ商と余りを　Ｋ商情報と　Ｋ余情報に　入れる
	Ｋ商情報を　Ｋ小数を文字列変換し　出力商に　入れる
　　Ｋ余情報を　Ｋ小数を文字列変換し　出力余に　入れる
	出力商と　出力余を	返す。

Ｌ商＿桁未満切り捨てとは　（Ｌ小数、Ｌ小数、小数桁数　→　Ｌ小数　）
		０の　Ｌ商を　返す。

Ｌ商＿桁未満四捨五入とは　（Ｌ小数、Ｌ小数、小数桁数　→　Ｌ小数　）
		１の　Ｌ商を　返す。
	
Ｌ商＿桁未満切り上げとは　（Ｌ小数、Ｌ小数、小数桁数　→　Ｌ小数　）
		２の　Ｌ商を　返す。

Ｌカンマ区切付加とは
		文字列Ａは　文字列
		文字列Ｂは　文字列実体　
		小数点位置は　ワード変数
		整数部桁数は　ワード変数
		三での商は　　ワード変数
　　　　三での余は　ワード変数
	文字列Ａに　入れる
	文字列Ｂを　クリアする
　　文字列Ａの　左端文字が　'-'と　等しい
　　または
	文字列Ａの　左端文字が　'+'と　等しい
		ならば　文字列Ａから　一文字切り出し　文字列Ｂに　一文字追加する
		つぎに

	文字列Ａの　'.'を　一文字検索し　小数点位置に　入れる
　　小数点位置が　１　以上
　　　　ならば　小数点位置から　一つ引いて　整数部桁数に　入れる
		さもなければ
　　　　　　　　文字列Ａの　文字数を　整数部桁数に　入れる
		つぎに
	整数部桁数を　３での　商と余りを　三での商と　三での余に　入れる
	三での余が　０と　等しい
		ならば　３文字だけ　文字列Ａから　切り出し　文字列Ｂに　追加する
				三での商を　一つ減少する
		さもなければ
　　　　　　　　三での余だけ　文字列Ａから　切り出し　文字列Ｂに　追加する
		つぎに
	三での商　回数指定し
		','を　文字列Ｂに　一文字追加し
		３文字だけ　文字列Ａから　切り出し　文字列Ｂに　追加する
	繰り返す
	文字列Ａを　文字列Ｂに　追加する
	文字列Ｂを　返す。

Ｌカンマ区切表示とは
	Ｌカンマ区切付加し　表示する。
```
## Ｌ小数型は　文字列実体 
L小数型は、内部では、符号、桁数、小数桁数、各桁の数字からなる構造体を使っていますが、ユーザインターフェースは、文字列実体”+123.456”などを使っていますので、ｍｉｎｄに元からある整数や小数などとの型変換は、「数値変換」「文字列変換」などを使えば可能だと思います。
事務処理用であれば、そんなに長い桁数は必要ないと思います。
## 内部の小数型定義
```
最大桁数は　定数　500。
最大文字数は　定数　最大桁数に　２　加えたもの。
ローカル。    
Ｋ小数型は　型紙
	Ｋ符号は　変数　	
	Ｋ桁数は　変数
	Ｋ小数桁数は　変数
	Ｋ数字は　バイト変数
	全体は　Ｋ符号と　Ｋ桁数と　Ｋ小数桁数と　最大桁数の　Ｋ数字。
```
## 各計算結果は、 即座にＬ小数型への格納が必要
 各演算の作業用に同一の文字列実体を使っているので、例えば下記の２つめはうまく動作しません。
 ```
 メインは　　　　　　　　（ ・ －－＞ ・ ）
　
   "100"に　"200"を　Ｌ加え　表示する 改行する
   "100"に　"200"を　Ｌ加え　"500"を　Ｌ加え 表示する 改行する。
 ```

 ### 実行結果
 ```
 c:\mind8\pmind\sample>test03
+300
+0500
```