TRUNC は、バイナリー・データが移動および算術演算時に切り捨てられる方法に影響を与えます。
デフォルト: TRUNC(STD)
省略形: なし
TRUNC は、COMP-5 データ項目には効力を持ちません。COMP-5 項目は、TRUNC サブオプションの指定に関係なく、TRUNC(BIN) が有効である場合と同様に処理されます。
推奨事項: 他のプロダクトによって設定される 2 進値を使用するプログラムの場合、推奨オプションは TRUNC(BIN) です。 他のプロダクト (IMS、DB2、C/C++、 FORTRAN、および PL/I など) は、COBOL の 2 進数データ項目に、データ項目の PICTURE 節に従わない値を入れることがあります。データが BINARY データ項目用の PICTURE 節に矛盾しない場合は、CICS プログラムで TRUNC(OPT) を使用することができます。
USAGE COMP-5 には、個々のデータ項目に TRUNC(BIN) の性質を適用する効果があります。 したがって、すべての 2 進数データ項目に対して TRUNC(BIN) を 使用することによるパフォーマンス上のオーバーヘッドは、非 COBOL プログラムまたは 他のプロダクトやサブシステムに渡されるデータ項目など、一部の 2 進数データ項目に のみ COMP-5 を指定することによって回避できます。COMP-5 の使用は、どの TRUNC サブオプションが有効であっても影響を受けません。
VALUE 節における大きなリテラル: コンパイラー・オプション TRUNC(BIN) を使用する場合、2 進数データ項目 (COMP、COMP-4、または BINARY) 用の VALUE 節に指定された数字リテラルは、PICTURE 節の 9 の数により暗黙指定される値に制限されることはなく、通常、固有 2 進表現 (2、4、または 8 バイト) の容量までの大きさの値を持つことができます。
01 BIN-VAR PIC S99 USAGE BINARY.
. . .
MOVE 123451 to BIN-VAR
次の表に、MOVE 後のデータ項目の値を示します。
| データ項目 | 10 進数 | 16 進数 | 表示 |
|---|---|---|---|
| 送り出し側 | 123451 | 00|01|E2|3B | 123451 |
| 受け取り側 TRUNC(STD) | 51 | 00|33 | 51 |
| 受け取り側 TRUNC(OPT) | -7621 | E2|3B | 2J |
| 受け取り側 TRUNC(BIN) | -7621 | E2|3B | 762J |
ハーフワードのストレージが BIN-VAR に割り振られます。プログラムが TRUNC(STD) オプションでコンパイルされた場合は、この MOVE ステートメントの結果は 51 で、フィールドは、PICTURE 節に適合するように切り捨てられます。
プログラムが TRUNC(BIN) オプションでコンパイルされた場合、MOVE ステートメントの結果は -7621 です。このような異常に見える結果になるのは、非ゼロの高位桁が切り捨てられたためです。ここでは、生成されたコード・シーケンスは、下位のハーフワード量 X'E23B' を受け取り側に移動させるだけです。切り捨てられた新しい値はオーバーフローして 2 進数ハーフワードの符号ビットになるため、値が負の数になります。
123451 は BIN-VAR の PICTURE 節より高い精度を持つため、この MOVE ステートメントを TRUNC(OPT) オプションでコンパイルしてはなりません。TRUNC(OPT) を使用した場合も、結果は -7621 になります。これは、10 進数の切り捨てを行わないことによって、最高のパフォーマンスが得られたからです。
01 BIN-VAR PIC 9(6) USAGE BINARY
. . .
MOVE 1234567891 to BIN-VAR
次の表に、MOVE 後のデータ項目の値を示します。
| データ項目 | 10 進数 | 16 進数 | 表示 |
|---|---|---|---|
| 送り出し側 | 1234567891 | 49|96|02|D3 | 1234567891 |
| 受け取り側 TRUNC(STD) | 567891 | 00|08|AA|53 | 567891 |
| 受け取り側 TRUNC(OPT) | 567891 | 53|AA|08|00 | 567891 |
| 受け取り側 TRUNC(BIN) | 1234567891 | 49|96|02|D3 | 1234567891 |
TRUNC(STD) を指定すると、送り出しデータは BINARY 受け取り側の PICTURE 節に適合するように、6 桁の整数に切り捨てられます。
TRUNC(OPT) を指定すると、コンパイラーは送り出しデータの精度が BINARY 受け取り側の PICTURE 節の精度よりも大きくないと想定します。この場合、最も効率のよいコード・シーケンスは、TRUNC(STD) が指定されているものとして切り捨てを行うことです。
TRUNC(BIN) を指定すると、BIN-VAR に割り振られた 2 進数フルワードにすべての送り出しデータが収まるため、切り捨ては行われません。
関連概念
数値データの形式
関連タスク
CICS オプションを使用したコンパイル
関連参照
VALUE 節 (Enterprise COBOL 言語解説書)