2.4.1 glpget/glpset(glpstx)

1.
機能
MATH1で(さらには電脳ライブラリ全体で) 使用する内部変数を参照/変更する. ( glpstxは実行時オプションによる変更を許す. ) 内部変数はすべて参照可能であるが, システムに依存するような内部変数は変更できない.
2.
呼び出し方法
lpara = NumRu::DCL.glpget(cp)
NumRu::DCL.glpset(cp,rpara)
NumRu::DCL.glpstx(cp,rpara)
3.
パラメーターの説明
cp (C*8) 内部変数の名前.
ipara (I,R,L) 内部変数の値.



以下にcpとして指定できる名前のリストを記す.



'NBITSPW' (I) 1語のビット長. システム依存(ふつうは32).
'NCHRSPW' (I) 1語の文字長. システム依存(ふつうは4).
'INTMAX' (I) 1語で表現できる最大の整数. システム依存(備考参照).
'REALMAX' (R) 1語で表現できる最大の実数. システム依存(備考参照).
'REALMIN' (R) 1語で表現できる最小の正の実数. システム依存(備考参照).
'IIUNIT' (I) 標準入力装置番号. システム依存 (ふつうは5).
'IOUNIT' (I) 標準出力装置番号. システム依存 (ふつうは6).
'MSGUNIT' (I) メッセージを出力する出力装置番号 (初期値は 'IOUNIT'と同じ).
'MAXMSG' (I) 出力する最大メッセージ数 (初期値は20).
'MSGLEV' (I) 出力するメッセージレベル. 0以下ならすべてのレベルのメッセージを出力する; 1なら警告, エラーメッセージを出力する; 2以上ならエラーメッセージだけ出力する (初期値は0).
'NLNSIZE' (I) 一行に出力するメッセージの 最大文字数(初期値は78). メッセージを出力する際, 各行の第一カラムにはブランクを書き出すので, 実際の一行の長さは 'NLNSIZE'+1 である.
'LMISS' (L) 欠損値処理をおこなうか どうかを指定する. .true.ならおこなう, .false.ならおこなわない (初期値は .false.).
'IMISS' (I) 欠損値処理をおこなうときの整数型の欠損値を指定する (初期値は999).
'RMISS' (R) 欠損値処理をおこなうときの実数型の欠損値を指定する (初期値は999.0).
'IUNDEF' (I) 不定であることを示す整数型の値 (初期値は-999).
'RUNDEF' (I) 不定であることを示す実数型の値 (初期値は-999.0).
'LEPSL' (L) 実数値を比較するとき, 誤差を含めた判断をするかどうかを指定する (第8,9,10,11章参照). .true.なら誤差を含めた判断をする; .false.なら誤差を含めた判断をしない (初期値は .false.).
'REPSL' (R) 誤差を含めた判断をするときの相対誤差の基準値. システム依存(備考参照).
'RFACT' (R) 誤差を含めた判断をするとき, 相対誤差の基準値にかけるスケーリングファクター (初期値は1.0). 'REPSL'×'RFACT'が相対誤差として用いられる.

4.
備考
(a)
内部変数を管理するための下請けルーチンとして 以下のものがある.
ncp = NumRu::DCL.glpqnp() 内部変数の総数 ncpを求める.
idx = NumRu::DCL.glpqid(cp) 内部変数 cpの位置 idxを求める.
cp = NumRu::DCL.glpqcp(idx) idxの位置にある内部変数の名前 cpを参照する.
ipara = NumRu::DCL.glpqvl(idx) idxの位置にある内部変数の値 iparaを参照する.
NumRu::DCL.glpsvl(idx,ipara) idxの位置にある内部変数の値 iparaを変更する.
(b)
GLpGETは上に述べたGLPQIDを呼んで 内部変数の位置を求め, glpqvlによって値を参照する; glpsetglpqidを呼んで内部変数の位置を求め, glpsvlによって値を設定する. したがって指定した内部変数名が見つからないとき, エラーメッセージはglpqidが出力する.
(c)
IPARAとしては適切な型の定数または変数を指定すること.
(d)
内部変数の名前は, 大文字・小文字の区別なく文字列を比較する 文字メソッド(元関数)lchreqを用いてチェックされるので, lchreqが正しく移植されていれば, 小文字で指定してもよい.
(e)
'REALMIN'があらわす最小の正の実数は, 仮数部の最上位の桁が0でないものとする. これは必ずしも UNDER FLOW を起こす直前の値ではないので 注意すること. すなわち, 通常実数型の変数は仮数部の最上位の桁が 0でないように規格化されるが, システムによってはこのような規格化をすると 指数部が足りなくなるような小さな値でも, 仮数部の上位の桁を0にすることで表現するものがある. このような値は一応実数として扱われるが, 通常の実数の精度はない. つまり'REALMIN'は通常の精度を持つ 最小の正の実数である.
(f)
'REPSL'があらわす相対誤差の基準値は, 実数表現の相対誤差の最大値の10倍とする. この10倍という値には任意性があるが計算結果の精度の目安 として安全率を10倍としたものである. 実数表現の相対誤差は内部表現の形から 論理的にもとめることができるが, 実際に実数の仮数部の最下位 bit を on/off することでも求めることができる. 1語の中の仮数部の位置はシステムによるが, 1語の最下位 bit が仮数部の最下位 bit であることが多い. src/env2/repsl にこのようなチェックをする プログラムが含まれている.
(g)
システムに依存するパラメーターのうち 'INTMAX', 'REALMAX', 'REALMIN', 'REPSL' は大きく分けて, メインフレーム系の大型計算機とUNIX系の計算機とでは 次の値をとることが多い.
  メインフレーム系 UNIX系
'INTMAX' 2147483647 2147483647
'REALMAX' 0.7237005E+76 3.4028236E+38
'REALMIN' 0.5397605E-78 1.1754944E-38
'REPSL' 0.95E-5 1.2E-6