sergeyken wrote:Both odd-, and even-number of digits Packed decimals:
1) use the same space in memory,
2) use the same machine instructions for ANY calculation
The only difference is, even-number digits is stored in the same field in memory, but one extra decimal 0-digits is added in the unused half-byte.
There is absolutely no reason to make any performance difference.
Furthermore, performance difference related to CPU operations, if any, can affect 0.0000000001% to 0.1% of overall performance issues, caused mainly by senseless algorithmic approach, and/or by wrong organization or required I/O operations.
I agree with sergeyken about the relative performance in doing arithmetic. However, there may be performance advantages converting an odd number of digits to printable decimal digits than doing the same conversion with an even number of decimal digits. Converting an odd number of digits, the program can move an ED instruction pattern to the output area and then use the ED instruction directly. Converting an even number of digits the program most likely copies the master ED pattern to a work area, just as before, executes the ED instruction, tests the result area to see if it effectively overflowed the output area, and then moves the low order even digits to the output area. Look at the Assembler code.
* Odd digits (best case)
MVC OUTAREA,EDPATT
ED OUTAREA,PDNUM
* Odd digits (worse case)
MVC WKAREA(L'EDPATT),EDPATT
ED WKAREA(L'EDPATT),PDNUM
MVC OUTAREA+L'OUTAREA-L'EDPATT,WKAREA
* Even digits
MVC WKAREA(L'EDPATT),EDPATT
ED WKAREA(L'EDPATT),PDNUM
CLI WKAREA+L'EDPATT-L'OUTAREA,C' '
BE NUMOK
... Overflow code here
NUMOK MVC OUTAREA,WKAREA+L'EDPATT-L'OUTAREA
...
OUTAREA DS CL4 or CL5 or CL6, for odd digits
WKAREA DS CL16
EDPATT DC 0C' 12345',C' ',X'2020202120'
PDNUM DC P'12345'
MVC OUTAREA,EDPATT
ED OUTAREA,PDNUM
* Odd digits (worse case)
MVC WKAREA(L'EDPATT),EDPATT
ED WKAREA(L'EDPATT),PDNUM
MVC OUTAREA+L'OUTAREA-L'EDPATT,WKAREA
* Even digits
MVC WKAREA(L'EDPATT),EDPATT
ED WKAREA(L'EDPATT),PDNUM
CLI WKAREA+L'EDPATT-L'OUTAREA,C' '
BE NUMOK
... Overflow code here
NUMOK MVC OUTAREA,WKAREA+L'EDPATT-L'OUTAREA
...
OUTAREA DS CL4 or CL5 or CL6, for odd digits
WKAREA DS CL16
EDPATT DC 0C' 12345',C' ',X'2020202120'
PDNUM DC P'12345'
The worse case odd digits may also have overflow issues, though it is less likely.
I grant my sample code is over simplified, but it does point out the possible issues.