Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, 言語解説書

ソースからターゲットへの変換規則

ターゲット: コード化算術フォーマット

ソース:

FIXED BINARY、FIXED DECIMAL、
FLOAT BINARY、および FLOAT DECIMAL
これらはすべてコード化算術データです。 コード化算術データ間での変換の規則については、ターゲットがこれらの各データ・タイプである場合に、その説明箇所で述べています。
算術文字 PICTURE
データは、まず 10 進数に変換されます。そのスケールと精度は、 対応する PICTURE 指定によって決まります。 次に、この 10 進値がターゲットの基数、スケール、モード、および精度に変換されます。 FIXED DECIMAL または FLOAT DECIMAL をソースとして使用しているコード化算術データの特定のターゲット・タイプの説明を参照してください。
CHARACTER
ソース・ストリングは有効な算術定数または複素数式でなければなりません。それ以外の場合は、CONVERSION 条件が生じます。 定数の頭に符号が付いていてもよく、定数の前後にブランクがあってもかまいません。 符号と定数の間には、ブランクがあってはなりません。また、複素数式では、実数部分の終わりと虚数部分の先頭の符号との間にブランクがあってはなりません。

定数は、基数、スケール、モード、および精度の属性を持ちます。 割り当ての場合のように、ターゲットの属性がソースの属性と無関係であるときは、定数はターゲットの属性に変換されます。 ソースとして定数の属性を使用しているコード化算術データの特定のターゲット・タイプの説明を参照してください。

演算式の計算の場合のように中間結果が必要なときは、中間結果の属性は、もとのストリングの代わりに精度 (N,0) の 10 進固定小数点値が使われている場合の中間結果の属性と同じです。(このため、コンパイラーは、定数の属性には関係なく、あらゆる場合に対処できるコードを生成することができます。) この結果、定数の小数部分が失われることがあります。 ソースとして FIXED DECIMAL を使用しているコード化算術データの特定のターゲット・タイプの説明を参照してください。

文字データ項目から中間の 10 進固定小数点への最初の変換では、 値が中間結果のデフォルト・サイズを超える可能性があります。 超える場合、使用可能になっていれば、SIZE 条件が起こります。

複素数を表す文字ストリングが実数のターゲットに割り当てられる場合、ストリングの実数部分だけがターゲットに割り当てられるので、そのストリングの虚数部分が正しい算術文字であるかどうかの検査は行われず、CONVERSION 条件も起こりません。

ソースがヌル・ストリングまたは 1 つ以上のブランクから成るストリングである場合、ターゲットにはゼロの値が割り当てられます。 CONVERSION 条件は起こりません

BIT
演算式の計算時に変換が起こる場合は、 ソースのビット・ストリングは FIXED BINARY(M,0) の符号なし値に変換されます。 FIXED BINARY をソースとして使用しているコード化算術データの特定のターゲット・タイプの説明を参照してください。

ソース・ストリングが、使用可能な精度よりも長いときは、左側のビットが無視されます。 ゼロ以外のビットが失われると、SIZE 条件が起こります。

ヌル・ストリングはゼロの値になります。

GRAPHIC
グラフィック変数とストリングが CHARACTER に変換された あとは *** ページで説明 されている文字ソースの規則に従ってください。
WIDECHAR
ワイド文字変数とストリングが CHARACTER に変換された 後は、*** ページで説明 されている文字ソースの規則に従ってください。
ターゲット: FIXED BINARY (p2,q2)

ソース:

FIXED DECIMAL (p1,q1)
結果の精度は、p2 = min(M,1+CEIL(p1*3.32)) で、q2=CEIL(ABS(q1*3.32))*SIGN(q1) です。
FLOAT BINARY (p1)
算術値の精度の変換で示したように、精度が変換されます。 p1 は宣言または指定されている値で、q1 は、2 進小数点の位置で決められ、 指数の値で変更されます。
FLOAT DECIMAL (p1)
FIXED DECIMAL から FIXED BINARY への変換の場合と同じように精度が 変換されます。p1 は宣言または指定されている値で、q1 は 10 進小数点の 位置で決められ、指数の値で変更されます。
算術文字 PICTURE
ターゲット: コード化算術を参照してください。
CHARACTER
ターゲット: コード化算術を参照してください。
BIT
ターゲット: コード化算術を参照してください。
GRAPHIC
ターゲット: コード化算術を参照してください。
WIDECHAR
ターゲット: コード化算術を参照してください。
ターゲット: FIXED DECIMAL (p2,q2)

ソース:

FIXED BINARY (p1,q1)
結果の精度は、p2=1+CEIL(p1/3.32) で、q2=CEIL(ABS(q1/3.32))*SIGN(q1) です。
FLOAT BINARY (p1)
FIXED BINARY から FIXED DECIMAL への変換の場合と同じように精度が 変換されます。p1 は宣言または指定されている値で、q1 は 2 進小数点の位置で 決められ、指数の値で変更されます。
FLOAT DECIMAL (p1)
算術値の精度の変換で説明したように、精度が変換されます。p1 は 宣言または指定されている値で、q1 は 10 進小数点の位置で決められ、 指数の値で変更されます。
算術文字 PICTURE
ターゲット: コード化算術を参照してください。
CHARACTER
ターゲット: コード化算術を参照してください。
BIT
ターゲット: コード化算術を参照してください。
GRAPHIC
ターゲット: コード化算術を参照してください。
WIDECHAR
ターゲット: コード化算術を参照してください。
ターゲット: FLOAT BINARY (p2)

ソース:

FIXED BINARY (p1,q1)
結果の精度は、p2=p1 です。 指数は、値の小数部分を表します。
FIXED DECIMAL (p1,q1)
結果の精度は、p2=CEIL(p1*3.32) です。 指数は、値の小数部分を表します。
FLOAT DECIMAL (p1)
結果の精度は、p2=CEIL(p1*3.32) です。
算術文字 PICTURE
ターゲット: コード化算術を参照してください。
CHARACTER
ターゲット: コード化算術を参照してください。
BIT
ターゲット: コード化算術を参照してください。
GRAPHIC
ターゲット: コード化算術を参照してください。
WIDECHAR
ターゲット: コード化算術を参照してください。
ターゲット: FLOAT DECIMAL (p2)

ソース:

FIXED BINARY (p1,q1)
結果の精度は、p2=CEIL(p1/3.32) です。 指数は、値の小数部分を表します。
FIXED DECIMAL (p1,q1)
結果の精度は、p2=p1 です。 指数は、値の小数部分を表します。
FLOAT BINARY (p1)
結果の精度は、p2=CEIL(p1/3.32) です。
算術文字 PICTURE
ターゲット: コード化算術を参照してください。
CHARACTER
ターゲット: コード化算術を参照してください。
BIT
ターゲット: コード化算術を参照してください。
GRAPHIC
ターゲット: コード化算術を参照してください。
WIDECHAR
ターゲット: コード化算術を参照してください。
ターゲット: 算術文字 PICTURE

算術文字 PICTURE データ項目は、10 進固定小数点 または 10 進浮動小数点の値を文字表記で表したものです。 ソースから算術文字 PICTURE への変換に関する以下の説明では、 左端または右端の桁を失わずに割り当てを行うのに 必要なターゲットの属性を示してあります。

ソース:

FIXED BINARY (p1,q1)
ターゲットが次の条件を満たしている必要があります。
  fixed decimal (1+x+q-y,q) or
  float decimal (x)

ただし、x>=CEIL(p1/3.32)、y=CEIL(q1/3.32)、かつ q>=y であること。

FIXED DECIMAL (p1,q1)
ターゲットが次の条件を満たしている必要があります。
  fixed decimal (x+q-q1,q) or
  float decimal (x)

ただし、x>=p1 かつ q>=q1 であること。

FLOAT BINARY (p1)
ターゲットが次の条件を満たしている必要があります。
  fixed decimal (p,q) or
  float decimal (p)

ただし、p>=CEIL(p1/3.32)、かつ p と q の値はソースの指数で 表しうる値の範囲を考慮していること。

FLOAT DECIMAL (p1)
ターゲットが次の条件を満たしている必要があります。
  fixed decimal (p,q) or
  float decimal (p)

ただし、p>=p1、かつ p と q の値はソースの指数で表しうる値の範囲を考慮していること。

算術文字 PICTURE
ソースの暗黙定義される属性は、FIXED DECIMAL または FLOAT DECIMAL です。 該当ターゲットに関する項目を参照してください。
CHARACTER
ターゲット: コード化算術を参照してください。
BIT(n)
ターゲットが次の条件を満たしている必要があります。
  fixed decimal (1+x+q,q) or
  float decimal (x)

ただし、x>=ceil(n/3.32) かつ q>=0 であること。

GRAPHIC
ターゲット: コード化算術を参照してください。
WIDECHAR
ターゲット: コード化算術を参照してください。
ターゲット: CHARACTER

ソース:

FIXED BINARY、FIXED DECIMAL、
FLOAT BINARY、および FLOAT DECIMAL
以下に説明するように、コード化算術値は 10 進定数 (負数の場合は頭に負符号 (-) が付けられる) に変換されます。 その定数は、ソースの属性から長さが導出される中間の文字ストリングに入れられます。 次に、この中間のストリングが、ストリングの割り当ての規則に従ってターゲットに割り当てられます。

コード化算術値から文字ストリングへの変換の規則は、リスト・ディレクティブ出力、データ・ディレクティブ出力、およびキーの評価 (REGIONAL ファイルの場合も) でも使用されます。

FIXED BINARY (p1,q1)
まず、2 進数の精度 (p1,q1) が、同等の 10 進数の精度 (p,q) に変換されます。 ただし、p=1+CEIL(p1/3.32) および q=CEIL(ABS(q1/3.32))*SIGN(q1) です。 そのあとの規則は、FIXED DECIMAL から CHARACTER への変換の規則と同じです。
FIXED DECIMAL (p1,q1)
p1>=q1>=0 の場合

p1<q1 または q1<0 の場合は、定数の右方にスケール因数が付加されます。 定数は任意指定の符号付き整数です。 項目の値がゼロであっても、スケール因数が付けられ、下記の構文になります。

  F{+|-}nn

ただし、{+|-}nn の値は -q1 です。

中間結果のストリングの長さは p1+k+3 です。 ただし、k は、q1 の値が入りきるのに必要な桁数です (符号と 英字 F は桁数に数えられません)。

算術値が複素数の場合、中間結果のストリングは、虚数部分が実数部分に連結した形になります。 左側の実数部分はソースの実数部分として生成され、 右側の虚数部分は、符号と英字 I が必ず付加されます。 このようにして生成されたストリングは、2 つのエレメントの間にブランクをはさんでいない複素数式となります。 この中間結果のストリングの長さは次のとおりです。

  2*p1+7     for p1>=q1>=0
  2*(p1+k)+7 for p1<q1 or q1<0

下の例は、実数および複素数の固定小数点 10 進数値から生成される、 中間結果のストリングを示します。

Precision     Value     String
 
(5,0)       2947        'bbbb2947'
(4,1)       -121.7      'b-121.7'
(4,-3)      -3279000    '-3279F+3'
(2,1)       1.2+0.3I    'bbb1.2+0.3I'
FLOAT BINARY (p1)
まず、浮動小数点 2 進数の精度 (p1) が同等の浮動小数点 10 進数の 精度 (p) に変換されます。ただし、p=CEIL(p1/3.32) です。 そのあとの規則は、FLOAT DECIMAL から CHARACTER への変換の規則と同じです。
FLOAT DECIMAL (p1)
ソースが 10 進浮動小数点数のときは、E(w,d,s) という形の E フォーマット項目で 伝送される場合と同様に変換されます。ただし、以下のような条件です。
  w、中間ストリングの長さは p1+8 です。

  d、小数桁の数は p1-1 です。

  s、有効数字の数は p1 です。

算術値が複素数の場合、中間結果のストリングは、虚数部分が実数部分に連結した形になります。 左側の実数部分はソースの実数部分として生成され、 右側の虚数部分は、符号と英字 I が必ず付加されます。 このようにして生成されたストリングは、2 つのエレメントの間にブランクをはさんでいない複素数式となります。 中間結果のストリングの長さは 2*p+17 です。

下の例は、実数および複素数の浮動小数点 10 進数値から生成される、 中間結果のストリングを示します。

Precision    Value          String
 
(5)          1735*10**5     'b1.7350E+0008'
(5)          -.001663       '-1.6630E-0003'
(3)          1              'b1.00E+0000'
(5)          17.3+1.5I      'b1.7300E+0001+1.5000E+0000I'
算術文字 PICTURE
実数の算術文字フィールドは、文字ストリングと解釈され、 文字ストリングの長さを変換する際の規則に従ってターゲット・ストリングに割り当てられます。 複素数の算術文字フィールドの場合は、 実数部分と虚数部分が連結されてから、ターゲット・ストリングに割り当てられます。 そのターゲット・ストリングには挿入文字が含まれます。
BIT
ビットの 0 は文字の 0 になり、ビットの 1 は文字の 1 になります。ヌル・ ビット・ストリングは、ヌル文字ストリングになります。 生成された文字ストリングは、ストリングの長さを変換する際の規則に従ってターゲット・ストリングに割り当てられます。
GRAPHIC
DBCS が SBCS に変換されるのは、 対応する SBCS 文字がある場合のみです。 そうでない場合には、CONVERSION 条件が起こります。
WIDECHAR
ワイド文字から文字への変換は、 すべてのワイド文字の値が '0080'wx より小さい場合にだけ実行されます。 そうでない場合には、CONVERSION 条件が起こります。

  ターゲット:BIT

ソース:

FIXED BINARY、FIXED DECIMAL、
FLOAT BINARY、および FLOAT DECIMAL
必要に応じて、算術値は 2 進数に変換され、符号や小数部分は無視されます。 (複素数の算術値の場合は、虚数部分も無視されます。) このようにして生成された 2 進値は、ビット・ストリングと見なされ、 ストリングを割り当てる際の規則に従ってターゲット・ストリングに割り当てられます。
FIXED BINARY (p1,q1)
中間結果のビット・ストリングの長さは、次の式で求められます。
  min(M,(p1-q1))

(p1-q1) が負数またはゼロのときは、ヌル・ビット・ストリングが生成されます。

下の例は、固定小数点 2 進数値から生成される、中間結果のストリングを示します。

Precision   Value    String
 
(1)           1      '1'B
(3)          -3      '011'B
(4,2)       1.25     '01'B
FIXED DECIMAL (p1,q1)
中間結果のビット・ストリングの長さは、次の式で求められます。
  min(M,CEIL((p1-q1)*3.32))

(p1-q1) が負数またはゼロのときは、ヌル・ビット・ストリングが生成されます。

下の例は、固定小数点 10 進数値から生成される、中間結果のストリングを示します。

Precision   Value    String
 
(1)           1         '0001'B
(2,1)       1.1        '0001'B
FLOAT BINARY (p1)
中間結果のビット・ストリングの長さは、次の式で求められます。
  min(M,p1)
FLOAT DECIMAL (p1)
中間結果のビット・ストリングの長さは、次の式で求められます。
  min(M,ceil(p1*3.32))
算術文字 PICTURE
まず、データは、算術 PICTURE 指定で決められたスケールと精度を持つ 10 進数として解釈されます。 次に、その項目は、FIXED DECIMAL または FLOAT DECIMAL から BIT への 変換規則に従って変換されます。
CHARACTER
文字の 0 はビットの 0 になり、文字の 1 はビットの 1 になります。 0 または 1 以外の文字があると、CONVERSION 条件が起こります。 ヌル・ストリングは、ヌル・ビット・ストリングになります。 生成されたビット・ストリング (その長さはソースの文字ストリングの長さと同じ) は、 ストリングを割り当てる際の規則に従ってターゲットに割り当てられます。
GRAPHIC
グラフィックの 0 はビットの 0 になり、グラフィックの 1 はビットの 1 に なります。0 または 1 以外のグラフィックがあると、CONVERSION 条件が起こります。 ヌル・ストリングは、ヌル・ビット・ストリングになります。 生成されたビット・ストリング (その長さはソースの 漢字ストリングの長さと同じ) は、 ストリングを割り当てる際の規則に従ってターゲットに割り当てられます。
WIDECHAR
ワイド文字の 0 ('0030'wx) はビットの 0 になり、 ワイド文字の 1 ('0031'wx) はビットの 1 になります。0 または 1 以外の ワイド文字があると、CONVERSION 条件が起こります。 ヌル・ストリングは、ヌル・ビット・ストリングになります。 生成されたビット・ストリング (その長さはソースの ワイド文字ストリングの長さと同じ) は、 ストリングを割り当てる際の規則に従ってターゲットに割り当てられます。
ターゲット: GRAPHIC

最初に、非グラフィック・ソースは、ターゲット: Characterで 説明した規則に従って文字に変換されます。 そのあとで、その結果の文字ストリングが DBCS ストリングに変換されます。

ターゲット: WIDECHAR

最初に、ワイド文字以外のソースは、ターゲット: Characterで 説明した規則に従って文字に変換されます。 そのあとで、その結果の文字ストリングがワイド文字ストリングに変換されます。


Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)