I understand that COMP-3 data occupies lesser space than a COMP variable. Assuming it this way why is that people prefer COMP over COMP-3. Is there any specific reasons that the COMP data have over COMP-3 variables. It would be great if some of you can give me an answer to the same.
There are various flavors of COMP, e.g. COMP-4/5, and compiler options that change it's execution characteristics. Check your compiler' manual for details.
Whoever told you that COMP-3 uses less storage than COMP was technically correct, but misleading. For numbers 0 thru 9 it's correct: COMP-3 requires 1 byte, COMP requires 2. However, a 2 byte signed COMP field can house numbers to +/-61439, while 2 bytes of COMP-3 can accommodate numbers limited to +/-999.
Another reason for choosing COMP is that it uses register to register arithmetic; a faster method than decimal arithmetic.
However, a 2 byte signed COMP field can house numbers to +/-61439
If I understood u correctly, according to my calculations I can accomodate +/- 9999 for COMP items and +32767 to -32768 for COMP-5. COMP-3 showed +/-999 as u have said. Let me know If I am missing something.
Joined: 06 Sep 2005 Posts: 28 Location: Minneapolis US
Here I want to contribute a few lines in this discussion, those might helpful to understand it very clearly.
Specified for binary data items. Such items have a decimal equivalent
consisting of the decimal digits 0 through 9, plus a sign. Negative numbers
are represented as the two's complement of the positive number with the same absolute value. The amount of storage occupied by a binary item depends on the number of decimal digits defined in its PICTURE clause:
1 through 4 2 bytes (halfword)
5 through 9 4 bytes (fullword)
10 through 18 8 bytes (doubleword)
The operational sign for ?big-endian? binary data (such as OS/390 and VM) is contained in the left most bit of the binary data. The operational sign for ?little-endian? binary data is contained in the left most bit of the right most byte of the binary data.
Specified for internal decimal items. Such an item appears in storage in
packed decimal format. There are 2 digits for each character position, except for the trailing character position, which is occupied by the low-order digit and the sign. Such an item can contain any of the digits 0 through 9, plus a sign, representing a value not exceeding 18 decimal digits.
The sign representation uses the same bit configuration as the 4-bit sign
representation in zoned decimal fields.
Following is the range I found in a IBM COBOL Programming manual
Picture Storage representation Numeric values
S9(1) through S9(4) Binary half-word (2 bytes) -32768 through +32767
S9(5) through S9(9) Binary full-word (4 bytes) -2,147,483,648 through
S9(10) through S9(18) Binary double-word (8bytes) -9,223,372,036,854,775,808 through +9.223,372,036,854,775,807
9(1) through 9(4) Binary half-word (2 bytes) 0 through 65535
9(5) through 9(9) Binary full-word (4 bytes) 0 through 4,294,967,295
9(10) through 9(18) Binary double-word (8bytes) 0 through 18,446,744,073,709,551,615