コード化算術データの一般情報については、データ・タイプとその属性を参照してください。
| 属性 | 省略形 |
|---|---|
| BINARY | BIN |
| COMPLEX | CPLX |
| DECIMAL | DEC |
| PRECISION | PREC |
コード化算術データ項目の基数 は、10 進数または 2 進数のいずれかです。 DECIMAL はデフォルトです。
コード化算術データ項目のスケール は、 固定小数点または浮動小数点のいずれかです。
固定小数点データ項目は有理数であり、その 10 進小数点または 2 進小数点の位置は、 定数のときは小数点として示され、変数のときは宣言済みのスケール因数で指定されます。
浮動小数点データ項目は、小数部分と指数部分のフォーマットの有理数です。
コード化算術データ項目の精度 には、桁数とスケール因数が含まれます。 (スケール因数は、固定小数点項目にのみ使用されます。)
精度属性の指定を表すとき、通常は (p,q) と書かれています。 ただし、p は桁数を表し、q はスケール因数を表します。
負のスケール因数 (-q) を指定すると、実際の最右端の桁から 右方向へ q 桁ずれた位置に小数点がある整数を表します。 桁数よりも大きい正のスケール因数 (q) を指定すると、実際の最右端の桁から 左方向に q 桁ずれた位置に小数点がある小数を表します。 いずれの場合も、間にゼロがあると想定されますが、それらは保管されません。実際に保管されるのは、指定された桁数だけです。
PRECISION を省略する場合は、精度属性を 同じ属性分配レベルのスケール (FIXED または FLOAT)、基数 (DECIMAL または BINARY)、 またはモード (REAL または COMPLEX) の属性のすぐあとに書き、 その間にほかの属性を指定してはなりません。
省略しない場合には、PRECISION は、宣言内の任意の場所に置くことができます。
算術データ項目 (コード化算術データ項目または数字データ項目) のモード が 実数か複素数のいずれかです。
実数データ項目は、実数の値を表す数です。
複素数データ項目は、2 つの部分 (実数部分と虚数部分) から構成されます。 複素数データ項目を表す変数の場合、実数部分と虚数部分の基数、スケール、および精度は同じです。
算術変数は REAL にデフォルト設定されます。
虚数の定数は、任意のタイプの実定数のすぐ後に文字 I を付けて書きます。 以下に例を示します。
27I 3.968E10I 11011.01BI
これらは、いずれも実数部分がゼロであると見なされます。 実数部分がゼロ以外の複合値は、次の構文を使った式で表します。
|
例えば、38+27I
下記の y および z という 2 つの複素数が与えられたとき、
y = complex(A,B); z = complex(C,D);
x=y/z は、次のように計算されます。
real(x) = (A*C + B*D)/(C**2 + D**2); imag(x) = (B*C - A*D)/(C**2 + D**2);
x=y*z は次のように計算されます。
real(x) = A*C - B*D; imag(x) = B*C + A*D;
これらの計算の途中で計算条件が起こることもあります。
SIGNED 属性と UNSIGNED 属性は、FIXED BINARY 変数と ORDINAL 変数にのみ使用できます。 SIGNED は、変数が負の値と想定できることを示します。 UNSIGNED は、変数が負の値と想定できることを示します。
UNSIGNED は、固定小数点演算のセマンティクスに次のような影響を与えます。
RULES(ANS) コンパイラー・オプションを使用している場合、UNSIGNED は、固定小数点演算のセマンティクスに次のような影響を与えます。
表 10 および表 11 に示されているように、 SIGNED 属性と UNSIGNED 属性はストレージ所要量に影響を及ぼします。
| 精度 | ストレージ占有量 (バイト) |
|---|---|
| 精度 <= 7 | 1 |
| 7 < 精度 <= 15 | 2 |
| 15 < 精度 <= 31 | 4 |
| 31 < 精度 <= 63 | 8 |
| 精度 | ストレージ占有量 (バイト) |
|---|---|
| 精度 <= 8 | 1 |
| 8 < 精度 <= 16 | 2 |
| 16 < 精度 <= 32 | 4 |
| 32 < 精度 <= 64 | 8 |
2 進固定小数点変数を宣言するデータ属性は、BINARY および FIXED です。 以下に例を示します。
declare Factor binary fixed (20,2);
上記の Factor は、20 個のデータ・ビットの 2 進固定小数点データを表す 変数として宣言され、20 桁のうち 2 桁は 2 進小数点の右側のビット数です。
符号付きおよび符号なしの固定 2 進データが占めるストレージについては、 SIGNED 属性と UNSIGNED 属性を参照してください。
宣言した数のデータ・ビットは、低位桁に入りますが、高位桁の余分な桁位置も、 そのデータ項目を使って行われるすべての演算の対象となります。 算術オーバーフローがこの余分な高位の桁位置に及んだかどうかが検出されるのは、 SIZE 条件が割り込み可能になっている場合だけです。
2 進固定小数点定数は、オプションの 2 進小数点を持つ 1 つ以上のビット、直後に文字 B によって構成されます。2 進固定小数点定数の 精度は (p,q) です。ここで p は定数内のデータ・ビットの 合計数で、q は 2 進小数点の右のビット数です。 以下に例を示します。
XN 定数は、16 進表記の SIGNED REAL FIXED BINARY 定数を表します。 定数が 8 桁以下の場合、その精度は 31 です。9 桁以上の場合は精度は 63 です。
|
次の例について考えてみます。
'100'XN /* same as '00000100'XN with value 256 */ '8000'XN /* same as '00008000'XN with value 32,768 */ 'FFFF'XN /* same as '0000FFFF'XN with value 65,535 */ "ffff_ffff"XN /* is the value -1 */
必要に応じて、XN 定数の 16 進数値は、指定された値の左側に 16 進のゼロが埋め込まれます。
XU 定数は、16 進表記の UNSIGNED REAL FIXED BINARY 定数を表します。 定数が 8 桁以下の場合、その精度は 32 です。9 桁以上の場合は精度は 64 です。
|
次の例について考えてみます。
'100'XU /* same as '00000100'XU with value 256 */ '8000'XU /* same as '00008000'XU with value 32,768 */ 'FFFF'XU /* same as '0000FFFF'XU with value 65,535 */ "ffff_ffff"XU /* is the value 2**32-1 */
必要に応じて、XU 定数の 16 進数値は、指定された値の左側に 16 進のゼロが埋め込まれます。
10 進固定小数点変数を宣言する場合のデータ属性は、DECIMAL および FIXED です。 以下に例を示します。
declare A fixed decimal (5,4);
この宣言は、A が 5 桁の 10 進固定小数点データを表すように指定しています。 5 桁のうちの 4 桁は小数点の右側にきます。
次に 2 つの例をあげます。
declare B fixed (7,0) decimal; declare B fixed decimal(7);
両方とも、B は 7 桁の整数を示します。
さらに、
declare C fixed (7,-2) decimal;
これは、C がスケール因数の -2 を示します。 つまり、C は少なくとも 7 桁を保持し、 -9999999*100 から 9999999*100 まで (増分は 100) の範囲を意味します。
さらに、
declare D decimal fixed real(3,2);
この場合は、D が少なくとも 3 桁 (そのうちの 2 桁が小数部分) の 固定小数点項目を表すことを指定しています。
10 進固定小数点データは、1 バイトに 2 桁ずつ保管され、 最右端バイトの右 4 ビットに符号が保管されます。 したがって、10 進固定小数点データ項目は、変数の宣言で桁数 p を 偶数として指定しても、必ず奇数として保管されます。
偶数の桁数を宣言すると、最高位の桁数に余分な 1 桁分が生じます。 この桁位置は、そのデータ項目を使って行われるすべての演算 (例えば、比較演算) の 対象となります。 余分な最高位の桁位置がゼロ以外の場合は、算術演算または割り当てでデータを使用すると、例外が発生することがあります。 算術オーバーフローまたは割り当てが、この余分な最高位の桁位置にまで及んだかどうかが検出されるのは、SIZE 条件が使用可能になっている場合だけです。
10 進固定小数点定数は、1 桁以上の 10 進数で構成されます。小数点はあってもなくても構いません。 10 進固定小数点定数の精度は (p,q) であり、 p はその定数の全桁数で、q は、小数点の右側に指定された桁数です。 以下に例を示します。
2 進浮動小数点の変数を宣言するデータ属性は、BINARY および FLOAT です。 以下に例を示します。
declare S binary float (16);
S は、2 進数が 16 桁の精度を持つ 2 進浮動小数点データを表します。
指数は 5 桁の 10 進数を超えることはできません。 宣言した精度が (21) 以下であれば、短精度の浮動小数点フォーマットで保管されます。 宣言した精度が (21) より大きく、(53) 以下であれば、 長精度の浮動小数点フォーマットが使用されます。 宣言した精度が (53) より大きい場合には、拡張精度の浮動小数点フォーマットが使用されます。
2 進浮動小数点定数は、仮数、指数、文字 B の順序で表記します。 仮数は、2 進固定小数点定数です。 指数は、英字の E、S、D、または Q のあとに 10 進整数 (符号はあってもなくてもよい) を書き、 これで 2 の累乗を表します。 E を使用する定数は、精度 (p) があります。p は小数部の 2 進数の数字です。 S、D および Q を使用する定数には、必ず最大単精度、最大倍精度、および最大拡張精度があります。 以下に例を示します。
10 進浮動小数点の変数を宣言するデータ属性は、DECIMAL および FLOAT です。 以下に例を示します。
declare Light_years decimal float(5);
Light_years の値は、 5 桁の 10 進数を持つ浮動小数点データを表しています。
IEEE 10 進浮動小数点データの場合、
その他すべての 10 進浮動小数点データの場合、
10 進浮動小数点定数は、小数部のあとに指数が続きます。 小数部は、10 進固定小数点定数になります。 指数は、E、S、D、または Q のあとに、4 桁以下の 10 進整数 (符号はあってもなくてもよい) を書き、 これで 10 の累乗を表します。 E を使用する定数には、精度 (p) があり、この p は、小数部の桁数になります。 S、D および Q を使用する定数は、常に単精度、倍精度、および拡張精度を表します。 以下に例を示します。
最後の 5 つの例は、(異なる精度を持っていますが) 同じ値を示しています。
IEEE 10 進浮動小数点 (DFP) の場合、10 進浮動小数点リテラルが、必要に応じてゼロ以外の数字が小数点の後に続かないように右側ユニット表示に変換された場合、つまり、指数が調整された場合に (例えば、3.1415E0 を 31415E-4 として表示する場合に行われるように)、リテラルによって与えられる精度の正常数の範囲にある指数を持っている必要があります。 これらの境界は、MINEXP-1 および MAXEXP-PLACES の値によって与えられます。 特に、次が保持される必要があります。
したがって、IEEE 10 進浮動小数点 (DFP) の場合、最も大きい正の短精度の浮動小数点リテラルは 9999999E90 (または .9999999E97) で、最も小さい正のゼロでない短精度の 10 進浮動小数点は 1E-95 になります。