アプリ版:「スタンプのみでお礼する」機能のリリースについて

a pic S9(13)COMP-3 VALUE 0012345678901.
b pic S9(11) OCCURS 14.
c pic --,---,---,--9.
aのデータをbに渡します。
bは渡されたデータを集計します。
集計したデータをcに渡して出力します。
結果は 2、345、678、901しか出力できませんでした。
原因は何ですか?教えてください。

A 回答 (4件)

集計用bの符号付桁数なぜaより小さい?


後、符号も桁数に入るんだっけ?(忘れた)
    • good
    • 0
この回答へのお礼

ありがとうぐざいます。
私は初心者ですから、それはよくわからないです。
このプログラムに取り扱うデータは11桁までです。レコードから読み込むデータの13桁の内上位二桁は0そうです。

お礼日時:2016/07/26 11:47

符号編集用文字「-」は、値が正の場合空白、負の場合「-」を出力


するので、言語仕様通りに該当位置に空白が出力されているだけ。
    • good
    • 2
この回答へのお礼

どうもありがとうぐざいます。

お礼日時:2016/07/26 11:38

固定小数点とパック十進はコンパイラーや処理CPUによって扱える最大数値が制限されるの要注意ですな。


CPUが32ビット またはコンパイラが32ビットなら、固定小数点の最大値は、+2147483647ぐらいかな。
桁落ちは起きますね。
パック十進は内部的に固定小数点に変換されて演算される処理系なら同様に桁落ちします。
某メインフレームではパック十進については独自のHWやマイクロコードを実装している機種もありますので、
CPUとコンパイラーの仕様を再確認する必要があります。
ちなみに、
2の累乗数は、キリ番的数値は記憶しておくべきですな。
扱える最大数値を判定する目安になりますので。
2の10乗 1024
2の12乗 4096
2の16乗 65536
2の32乗 4294967296

しかし 32ビットコンパイラなら以下の表記は桁あふれでシンタックスエラーになるはずですが。
a pic S9(13)COMP-3 VALUE 0012345678901.
COBOLは機種やメーカによって方言が多様なので、このタイプのシンタクスエラーを無視するコンパイラかも。
    • good
    • 2

微かな記憶で回答するので自信はないのですが。


No.2の回答が最も説得力がありそうですが、「値が正の場合空白」というのはなく0以外は有効数値がそのまま出力されたように思います。ですからこの回答は間違いで、ここにこのような質問として上げられているのでしょう。
私が考えるのは、質問に記載されている内容は簡略化されていますが、プログラムそのものは少し違うのではないかと疑います。つまり、「aのデータをbに渡します。bは渡されたデータを集計します。集計したデータをcに渡して出力します。」この3行の中に、言い表せていないプログラムで桁落ちする要素が含まれているのではないかと。
もし可能でしたら MOVE a TO b(1)、MOVE b(1) TO c を実行してcの内容を確認してみて下さい。これで桁落ちしないなら、先の3行のロジックに桁落ちの要素があるのです。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています