SLANG用実数演算ライブラリ SOROBAN.LIB

大貫信昭
 
 このSOROBAN.LIBは,SLANGに実数演算を可能にするためのライブラリです。とはいえ,やっていることはSOROBANを呼び出しているだけですので,プログラム中にそのまま式を記述することはできません。変数管理にしてもシステムが扱えるのは,依然として整数のみなので,計算は実数そのものではなく,実数が格納されているアドレスを関数に渡す方法となっています。
 たとえば,加算は,
  A=B+C
ではなく,
  @ADD(B,C,A)
のようになります。
 また本ライブラリでは,MACHINE宣言を行っていますので使用する際には,このライブラリが必ずテキストの先頭になければなりません。SLANGのディスク版を使用しているなら,#INCLUDEを使いユーザープログラムの先頭でこのライブラリを取り込んでください。オンメモリ版の場合は,エディタでユーザープログラムの先頭にライブラリを読み込むようにしてください。
 そして,なるべくMAIN()の先頭で@SINGLE(),@DOUBLE()を実行して精度指定をしておきましょう。浮動小数点形式のデータは配列の形で宣言しますが,配列の大きさは単精度なら@SNG,倍精度なら@DBLという記号定数を使うとわかりやすいでしょう。ちなみに配列は,バイト単位でアクセスしないならば,1バイト型でも2バイト型でもかまいません。
 

SOROBAN.LIB関数 リファレンスマニュアル

●有効桁数は,単精度で8桁,倍精度で16桁となる。
●unsignedは16ピット長無符号整数。
●intは16ピット長符号付き整数。
●fp,fp1,fp2,fp3は浮動小数点形式のデータの先頭アドレス。
●データ,データ1,データ2,データ3はそれぞれ,fp,fp1,fp2,fp3の指す浮動小数点形式の数値を示す。
●stringは文字列格納用バッファのアドレス。
 

■定数

@SNG
[値 ] 4
[備考] 単精度の宣言に使用する
[例 ] ARRAY A[@SNG],B[@SNG]
@DBL
[値 ] 7
[備考] 倍精度の宣言に使用する
[例 ] ARRAY X[@DBL],Y[@DBL]
 

■関数

@SINGLE()
[機能] 以後の演算を単精度で行う
@DOUBLE()
[機能] 以後の演算を倍精度で行う
@MOVE(fp1,fp2)
[機能] データ2をデータ1に代入
[返値] fp1を返す
@SWAP(fp1,fp2)
[機能] データ1とデータ2を交換
[返値] fp1を返す
@CVDBL(fp1,fp2)
[機能] 単精度のデータ2を倍精度にしてデータ1とする
[返値] fp1を返す
@CVSNG(fp1,fp2)
[機能] 倍精度のデータ2を単精度にしてデータ1とする
[返値] fp1を返す
@CVSTF(fp,string)
[機能] stringに格納されたASCII文字列を浮動小数点形式のデータに変換
[返値] ASCII文字列の終了アドレス+1を返す
@CVUTF(fp,unsigned)
[機能] 16ピット長無符号整数を浮動小数点形式のデータに変換
[返値] fpを返す
@CVITF(fp,int)
[機能] 16ピット長符号付き整数を浮動小数点形式のデータに変換
[返値] fpを返す
@CVFTS(fp)
[機能] データをASCII文字列に変換し,内部バッファに格納
[返値] 内部バッファ(ASCII文字列)の先頭アドレスを返す
[備考] エンドマークとしてASCII文字列の最後に00Hが付く
@CVFTU(fp)
[機能] データを16ピット長無符号整数に変換
[返値] 16ピット長無符号整数を返す
@CVFTI(fp)
[機能] データを16ピット長符号付き整数に変換
[返値] 16ビット長符号付き整数を返す
@ADD(fp1,fp2,fp3)
[機能] データ2とデータ3を足した答えをデータ1とする
[返値] fp1を返す
@SUB(fp1,fp2,fp3)
[機能] データ2からデータ3を引いた答えをデータ1とする
[返値] fp1を返す
@MUL(fp1,fp2,fp3)
[機能] データ2とデータ3を掛けた答えをデータ1とする
[返値] fp1を返す
@DIV(fp1,fp2,fp3)
[機能] データ2をデータ3で割った答えをデータ1とする
[返値] fp1を返す
@IDIV(fp1,fp2,fp3)
[機能] データ2をデータ3で整数除算した答えをデータ1とする
[返値] fp1を返す
@MOD(fp1,fp2,fp3)
[機能] データ2をデータ3で割った余りをデータ1とする
[返値] fp1を返す
@CMP(fp1,fp2)
[機能] データ1とデータ2を比較
[返値] データ1のほうが大きければ1,等しければ0,小さければ-1を返す
@NEG(fp1,fp2)
[機能] データ2の符号を反転してデータ1とする
[返値] fp1を返す
@INT(fp1,fp2)
[機能] データ2を越えない最大の整数をデータ1とする
[返値] fp1を返す
@FIX(fp1,fp2)
[機能] データ2の小数点以下を切り捨ててデータ1とする
[返値] fp1を返す
@FRAC(fp1,fp2)
[機能] データ2の小数部をデータ1とする
[返値] fp1を返す
@CINT(fp1,fp2)
[機能] データ2の小数第1位を四捨五入してデータ1とする
[返値]fp1を返す
@SQR(fp1,fp2)
[機能] データ2の平方根をデータ1とする
[返値] fp1を返す
@SIN(fp1,fp2)
[機能] データ2のサインをデータ1とする
[返値] fp1を返す
[備考] データ2はラジアン単位
@COS(fp1,fp2)
[機能] データ2のコサインをデータ1とする
[返値] fp1を返す
[備考] データ2はラジアン単位
@TAN(fp1,fp2)
[機能] データ2のタンジェントをデータ1とする
[返値] fp1を返す
[備考] データ2はラジアン単位
@ATN(fp1,fp2)
[機能] データ2のアークタンジエント(逆正接)をデータ1とする
[返値] fp1を返す
[備考] データ2は-π/2〜π/2
@EXP(fp1,fp2)
[機能] 自然対数の底eのデータの2乗をデータ1とする
[返値] fp1を返す
[備考] データ2は88以下
@LOG(fp1,fp2)
[機能] データ2の自然対数をデータ1とする
[返値] fp1を返す
@POW(fp1,fp2,fp3)
[機能] データ2のデータ3乗をデータ1とする
[返値] fp1を返す
@PAI(fp1,fp2)
[機能] 円周率πをデータ1とする
[返値] fp1を返す
@RAD(fp1,fp2)
[機能] 度単位のデータ2をラジアン単位に変換してデータ1とする
[返値] fp1を返す
@ABS(fp1,fp2)
[機能] データ2の絶対値をデータ1とする
[返値] fp1を返す
@SGN(fp1,fp2)
[機能] データ2が正の場合は1,0の場合は0,負の場合は-1をデータ1とする
[返値] fp1を返す
 
(C)1989 Nobuaki Ohnuki(original)
(C)1997 Junji Okazaki(edited)
(C)2024 Oh!Ishi,Nibbles Lab.(formatted)