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