数値データに使用できる形式には幾つかあります。
カテゴリー数値データ項目で USAGE DISPLAY が (コーディングされているゆえに、あるいはデフォルトにより) 有効である場合、ストレージのそれぞれの位置 (バイト) は 1 つの 10 進数字を含みます。 すなわち、項目は表示可能な形式で保管されます。 USAGE DISPLAY を持っている外部 10 進数項目は、ゾーン 10 進数データ項目と呼びます。
カテゴリー数値データ項目で USAGE NATIONAL が有効である場合、それぞれの 10 進数字ごとに 2 バイトのストレージが必要です。 項目は UTF-16 形式で保管されます。 USAGE NATIONAL を持つ外部 10 進数項目は、国別 10 進数データ項目と呼びます。
国別 10 進数データ項目は、符号付きの場合には、SIGN SEPARATE 文節が有効になっている必要があります。ゾーン 10 進数項目のその他の規則すべてが国別 10 進数項目に適用されます。国別 10 進数項目は、他のカテゴリー数値データ項目を使用できる場所ならどこででも使用できます。
外部 10 進数 (ゾーン 10 進数と国別 10 進数の両方) データ項目は、プログラムと、ファイル、端末、またはプリンターとの間で数値をやり取りすることを主な目的としています。 外部 10 進数項目は、算術処理で、オペランドおよび受け取り側として使用することもできます。ただし、プログラムで多数の算術計算を集中的に実行し、効率を優先させるのであれば、算術計算で使用するデータ項目には、COBOL の計算数値タイプを使用した方がよい場合もあります。
浮動小数点データ項目で USAGE DISPLAY が (コーディングされているゆえに、あるいはデフォルトにより) 有効である場合、 PICTURE 文字位置 (使用されている場合、暗黙の小数点である v を除く) は 1 バイトのストレージを占有します。 項目は表示可能な形式で保管されます。 USAGE DISPLAY を持つ外部浮動小数点項目は、本書では 表示浮動小数点 データ項目と呼びます。そのように呼ぶのは、USAGE NATIONAL を持つ外部浮動小数点項目と区別する必要がある場合です。
以下の例では、Compute-Result が暗黙的に表示浮動小数点項目として定義されています。
05 Compute-Result Pic -9v9(9)E-99.
負符号 (-) は、仮数および指数が必ず負の数値でなければならないことを意味するものではありません。負符号は、数値が表示されるときに、正数であれば符号がブランクとなり、負数であれば符号が負符号となることを意味しています。正符号 (+) をコーディングすると、符号は、正数であれば正符号となり、負数であれば負符号となります。
浮動小数点データ項目で USAGE NATIONAL が有効である場合、それぞれの PICTURE 文字位置 (使用されている場合、v を除く) は 2 バイトのストレージを占有します。 項目は国別文字 (UTF-16) として保管されます。 USAGE NATIONAL を持つ外部浮動小数点項目は、 国別浮動小数点 データ項目と呼びます。
表示浮動小数点項目の既存の規則は、国別浮動小数点項目に適用されます。
以下の例では、 Compute-Result-N は国別浮動小数点項目です。
05 Compute-Result-N Pic -9v9(9)E-99 Usage National.
Compute-Result-N が表示される場合、Compute-Result について上述したように符号が表示されますが、国別文字で表示されます。
外部浮動小数点項目に VALUE 文節を使用することはできません。
浮動小数点数は、外部 10 進数と同様、(コンパイラーによって) 数値の内部表現に変換しなければ、算術演算で使用することはできません。デフォルト・オプションの ARITH (COMPAT) を使用してコンパイルした場合、外部浮動小数点数は長精度 (64 ビット) の浮動小数点形式に変換されます。ただし、ARITH (EXTEND) を使用してコンパイルすれば、外部浮動小数点数は拡張精度 (80 ビット IEEE) の浮動小数点形式に変換されます。
BINARY、 COMP、および COMP-4 は、同義語です。 2 進数形式の数値は、2、4、または 8 バイトのストレージを占めます。バイト反転の 2 進データ (右端バイトの左端ビットが符号ビット) を除き、この形式は、左端ビットを演算符号とした固定小数点になります。
2 進数は、付随する PICTURE 記述が 4 個以下の 10 進数字であれば 2 バイトを占め、5 個から 9 個の 10 進数字であれば 4 バイトを占め、10 個から 18 個の 10 進数字であれば 8 バイトを占めます。9 桁以上の 2 進数項目には、コンパイラーによる余分な処理が必要となります。
2 進数項目には、例えば、指標、添え字、スイッチ、および算術オペランドや結果を入れることができます。
2 進データ (BINARY、COMP、または COMP-4) の切り捨て方法を指定するには、TRUNC(STD|OPT|BIN) コンパイラー・オプションを使用してください。
USAGE COMP-5 として宣言したデータ項目は、ストレージ内では 2 進データとして表されます。 しかし、これらは、USAGE COMP 項目とは異なり、PICTURE 文節の 9 の数で暗黙指定される値に制限されるのではなく、固有 2 進数表現 (2、4、または 8 バイト) の容量までの大きさの値を含むことができます。
数値データを COMP-5 項目に移動または保管すると、COBOL PICTURE サイズ制限ではなく、2 進数フィールド・サイズで切り捨てが行われます。COMP-5 項目を参照する場合、演算では完全な 2 進数フィールド・サイズが使用されます。
したがって、COMP-5 は、データが COBOL PICTURE 文節に適合しない可能性のある非 COBOL プログラムから生じる 2 進データ項目の場合に特に有用です。
次の表は、COMP-5 データ項目に指定可能な値の範囲を示しています。
| PICTURE | ストレージ表現 | 数値 |
|---|---|---|
| S9(1) から S9(4) | 2 進数ハーフワード (2 バイト) | -32768 から +32767 |
| S9(5) から S9(9) | 2 進数フルワード (4 バイト) | -2,147,483,648 から +2,147,483,647 |
| S9(10) から S9(18) | 2 進数ダブルワード (8 バイト) | -9,223,372,036,854,775,808 から +9,223,372,036,854,775,807 |
| 9(1) から 9(4) | 2 進数ハーフワード (2 バイト) | 0 から 65535 |
| 9(5) から 9(9) | 2 進数フルワード (4 バイト) | 0 から 4,294,967,295 |
| 9(10) から 9(18) | 2 進数ダブルワード (8 バイト) | 0 から 18,446,744,073,709,551,615 |
COMP-5 項目の PICTURE 文節に、スケーリング (すなわち、小数部の桁数または暗黙の整数桁数) を指定することができます。その場合は、上記にリストされた最大容量とほぼ同じ大きさをスケーリングする必要があります。例えば、PICTURE S99V99 COMP-5 として記述したデータ項目は、ストレージ内では 2 進数ハーフワードとして表され、-327.68 から +327.67 までの範囲の値をサポートします。
VALUE 文節のラージ・リテラル: COMP-5 項目の VALUE 文節に指定されたリテラルは、一部の例外を除いて、固有 2 進数表現の容量までの大きさの値を含むことができます。 例外については、「COBOL for Windows 言語解説書」を参照してください。
TRUNC コンパイラー・オプションの設定に関係なく、COMP-5 データ項目は、TRUNC(BIN) でコンパイルされたプログラムでは、2 進データのように動作します。
Windows ベースのワークステーションでは、バイト反転に注意しなければならない場合があります。 2 進数データの格納方法は、ご使用のハードウェアおよびソフトウェアによって異なります。例えば、Intel® プラットフォームのデフォルトでは、リトル・エンディアン 形式 (最上位数字が最上位アドレスに格納される) で 2 進数データが格納されます。zSeries® と AIX® では、 ビッグ・エンディアン 形式 (最下位数字が最上位アドレスに格納される) で 2 進数データが格納されます。
BINARY(NATIVE|S390) コンパイラー・オプションを使用すると、2 進数データの型 (BINARY、COMP、COMP-4) をビッグ・エンディアン形式とリトル・エンディアン形式のどちらで格納するかを指定することができます。
コンパイラーは、BINARY(NATIVE|S390) の設定にかかわらず、COMP-5 をネイティブの 2 進数データ形式で処理します。
ご使用のアプリケーションが、ネイティブの 2 進数データ形式を前提とする他の言語 (C/C++ など) または他の製品 (CICS や DB2 など) とのインターフェースとなる場合は、COMP-5 を使用します。ただし、SORT または MERGE ステートメントに、ビッグ・エンディアンとリトル・エンディアンの両方のバイナリー・キーを含めることはできません。例えば、BINARY(S390) オプションが有効で、SORT または MERGE キーの一方が COMP-5 データ項目になる場合は、他方の SORT または MERGE キーを COMP、BINARY、または COMP-4 データ項目にすることはできません。
PACKED-DECIMAL と COMP-3 は同義語です。 パック 10 進数項目は、PICTURE 記述でコーディングされる 2 つの 10 進数字ごとに 1 バイトのストレージを占めます。ただし、右端のバイトだけが例外で、右端のバイトには 1 つの数字と符号が入ります。この形式が最も効率的に使用されるのは、PICTURE 記述で奇数の桁をコーディングして、左端のバイトが完全に使用されるようにするときです。パック 10 進数項目は、算術演算の目的では固定小数点数として扱われます。
COMP-1 は短精度浮動小数点形式を指し、COMP-2 は長精度浮動小数点形式を指します。これらの形式は、それぞれ、4 バイトと 8 バイトのストレージを占めます。
FLOAT(NATIVE) コンパイラー・オプション (デフォルト) が有効な場合は、COMP-1 および COMP-2 データ項目が IEEE 形式で表されます。FLOAT(S390) (またはその同義語 FLOAT(HEX)) が有効な場合は、COMP-1 および COMP-2 データ項目が一貫して zSeries、つまり 16 進数の浮動小数点形式で表されます。詳細については、後述の FLOAT オプションに関する説明を参照してください。
関連概念
Unicode および言語文字のエンコード
付録C. 中間結果および算術精度
関連タスク
数値データの定義
国別数値データ項目の定義
関連参照
国別データの保管
TRUNC
BINARY
FLOAT
データのクラスおよびカテゴリー
(「COBOL for Windows 言語解説書」)
SIGN 文節
(「COBOL for Windows 言語解説書」)
VALUE 文節
(「COBOL for Windows 言語解説書」)