Back in 1981, one of the first bugs I had to find/fix was a COBOL (VS?) routine 
intended to distribute the rounding difference to a set of records. Perform 
until zero left to distribute. It looped at negative zero. I didn't write it, I 
don't remember my precise fix. 

> -----Original Message-----
> From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU]
> On Behalf Of Frank Swarbrick
> Sent: Friday, July 13, 2012 3:07 PM
> To: IBM-MAIN@LISTSERV.UA.EDU
> Subject: Re: COBOL packed decimal
> 
> Excellent!  Thank you very much!
> Subtle is right!  :-)
> Negative zero, huh?  Must be that new math, thing.  :-)
> 
> Frank
> 
> 
> 
> 
> >________________________________
> > From: "Dan Skomsky @ Home" <poodles...@sbcglobal.net>
> >To: IBM-MAIN@LISTSERV.UA.EDU
> >Sent: Friday, July 13, 2012 3:24 PM
> >Subject: Re: COBOL packed decimal
> >
> >From an old discussion on the same subject from back in '05 over at
> >http://www.tek-tips.com :
> >
> >Here's an explanation of what is happening.  When we were converting
> >from VS COBOL to COBOL II/COBOL 370, I found the book "COBOL/370 FOR
> VS
> >COBOL AND COBOL II PROGRAMMERS by Harvey Bookman.  Here's what he says
> >about your question....
> >
> >"One change from VS COBOL to COBOL/370 that may seem quite baffling
> >occurs when a constant or another COMP-3 data field is added or
> >subtracted to or from a signed COMP-3 data field.  The VS COBOL
> >compiler produced only an Add Packed (AP) or Subtract Packed (SP)
> >instruction.  COBOL/370 still produces the same instruction but then
> >issues a Zero and Add Packed (ZAP) of the resulting field into
> itself.  The ZAP is executed for a very subtle reason.
> >When two negative numbers are added together and an overflow occurs,
> >the overflow flag in the condition code is turned on while the
> >resulting sign is set as if overflow did not occur.  This means that
> if
> >two numbers each defined as PIC S9(03) COMP-3 were added together, and
> >they had values of -1 and -999 before the addition, the resulting
> field
> >would be zero (the digit that overflowed was truncated) with its sign
> >negative.  The ZAP will preserve the sign of all other computations
> but
> >will change a zero with a negative sign to a zero with a positive
> sign."
> >
> >"Ensuring a positive sign in a zero result was not necessary in the VS
> >COBOL compiler.  This is because the VS COBOL compiler used a Compare
> >Packed (CP) instruction to compare numeric fields.  It is interesting
> >that COBOL/370 now often produces a Compare Logical (CLC) instruction
> >to compare numeric fields.  While this is a faster instruction than
> CP,
> >it requires the same sign value for an equal condition to occur.  For
> >example, a CP instruction will find fields with hexadecimal values
> '0F'
> >and '0C' equal, while the CLC will not."
> >
> >The same instructions are generated in Enterprise COBOL as were for
> >COBOL/370.
> >
> >HTH
> >
> >-----Original Message-----
> >From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU]
> >On Behalf Of Itschak Mugzach
> >Sent: Friday, July 13, 2012 4:10 PM
> >To: IBM-MAIN@LISTSERV.UA.EDU
> >Subject: Re: COBOL packed decimal
> >
> >Zero and add pack.
> >
> >ITschak
> >
> >On Sat, Jul 14, 2012 at 12:05 AM, Frank Swarbrick
> ><frank.swarbr...@yahoo.com
> >> wrote:
> >
> >> COBOL code
> >> 77  ws-num-packed              pic S9(9) packed-decimal.
> >>
> >>     add 2 to ws-num-packed
> >>
> >>
> >> Generated assembler:
> >>
> >>
> >> 000014
> >> ADD
> >>    00036A                 GN=16    EQU
> >> *
> >>    00036A  FA40 8008 A02C          AP    8(5,8),44(1,10)
> >>WS-NUM-PACKED                     PGMLIT AT +40
> >>    000370  F844 8008 8008          ZAP   8(5,8),8(5,8)  WS-NUM-
> PACKED
> >>WS-NUM-PACKED
> >>
> >>
> >> What is the purpose of the ZAP?
> >>
> >> Thanks,
> >> Frank
> >>
> >>
> >> --------------------------------------------------------------------
> -
> >> - For IBM-MAIN subscribe / signoff / archive access instructions,
> >> send email to lists...@listserv.ua.edu with the message: INFO
> >> IBM-MAIN
> >>
> >
> >----------------------------------------------------------------------
> >For IBM-MAIN subscribe / signoff / archive access instructions, send
> >email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
> >
> >----------------------------------------------------------------------
> >For IBM-MAIN subscribe / signoff / archive access instructions, send
> >email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
> >
> >
> >
> 
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions, send
> email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to