# Finding DIFFERENCE between two variables

Author Message
AJAYREDDY

New User

Joined: 17 Feb 2007
Posts: 52
Location: USA

 Posted: Mon Jan 28, 2008 6:56 pm Hi, I have a situation where I got 2 variables A and B. I need to find the difference between 2 and display the correct results. Example: If A = 11 and B = -4 I need to Display as 7 If A = -11 and B = -4 I need to Display as -7 (still I need difference between A and B, not -15) If A = -11 and B = 4 I need to Display as -7 Is there any COMPUTE verb or any COBOL function where I can get the difference between 2 as above ? It should be able to do intelligently !!! I do not know what will be the values inside A and B until it is calculated. But after calculation I should get results as above. Please let me know for any ideas!! Thanks
Phrzby Phil

Senior Member

Joined: 31 Oct 2006
Posts: 1039
Location: Richmond, Virginia

 Posted: Mon Jan 28, 2008 7:55 pm Difference means subtract. It gives you the distance between two numbers on the real number line. If A=11 and B=-4, then the difference is not 7, and no correct code will give you that. A-B = 15, and B-A = -15. It seems you want the difference of their absolute values. Either find an absolute value function, or do it yourself: if A < 0, then A = -A.
enrico-sorichetti

Superior Member

Joined: 14 Mar 2007
Posts: 10866
Location: italy

 Posted: Mon Jan 28, 2008 8:12 pm the issue here is that the logic is confusing but diff = sign(A) * ( abs(A) -abs(B) ) gives what You want for the values given, what if abs(b) > abs(a) a= 4 b=11 diff = ???
AJAYREDDY

New User

Joined: 17 Feb 2007
Posts: 52
Location: USA

Posted: Mon Jan 28, 2008 8:27 pm

 Phrzby Phil wrote: Difference means subtract. It gives you the distance between two numbers on the real number line. If A=11 and B=-4, then the difference is not 7, and no correct code will give you that. A-B = 15, and B-A = -15. It seems you want the difference of their absolute values. Either find an absolute value function, or do it yourself: if A < 0, then A = -A.

Hi Phil,

That is what I am looking for Absolute value function. If you know the syntax please let me know. I can do by programming logic as IF A<0 or B<0 etc. But I have about 20 to 25 fields to compare each other.

Thanks
dick scherrer

Moderator Emeritus

Joined: 23 Nov 2006
Posts: 19244
Location: Inside the Matrix

 Posted: Mon Jan 28, 2008 10:35 pm Hello, What should be the "difference" if A=4 and B=11?
rag swain

New User

Joined: 17 Dec 2007
Posts: 33
Location: pune,INDIA

 Posted: Mon Jan 28, 2008 10:49 pm You can use FUNCTION ABS with COMPUTE verb to get the absolute value of a variable. But then your requirement is not clear. If A < B, then how would you go for calculation?
AJAYREDDY

New User

Joined: 17 Feb 2007
Posts: 52
Location: USA

Posted: Mon Jan 28, 2008 11:33 pm

 rag swain wrote: You can use FUNCTION ABS with COMPUTE verb to get the absolute value of a variable. But then your requirement is not clear. If A < B, then how would you go for calculation?

Yeah, that is where the main problem is. If A = 4 and B = 11 , I need value 7. It should not give me -7. If A=4 and B= -11 , it should still give me value 7 not ((4 - (-11))=15.

I can use the logic behind the scene as IF A<B ELSE A>B. But just curious to know if any COBOL function is there to get the results directly.

Thanks
Phrzby Phil

Senior Member

Joined: 31 Oct 2006
Posts: 1039
Location: Richmond, Virginia

 Posted: Tue Jan 29, 2008 12:02 am ABS(ABS(A) - ABS(B))
Ganesh.Deokar

New User

Joined: 30 Sep 2005
Posts: 26
Location: Buffalo,NY

 Posted: Tue Jan 29, 2008 12:16 am Try this. It's a simple one. Define 3 more variables(WS-FIELD3, WS-FIELD4 and WS-FIELD5) without sign. 01 WS-TEMP. 05 WS-FIELD1 PIC -9(2). 05 WS-FIELD2 PIC -9(2). 05 WS-FIELD3 PIC 9(2). 05 WS-FIELD4 PIC 9(2). 05 WS-FIELD5 PIC 9(2). 1) Move your input values from WS-FIELD1 and WS-FIELD2 to WS-FIELD3 and WS-FIELD4 respectively. 2) Compute the difference between WS-FIELD3 and WS-FIELD4 in WS-FIELD5.
the_gautam

Active User

Joined: 05 Jun 2005
Posts: 165
Location: Bangalore

 Posted: Tue Jan 29, 2008 11:00 am IF A IS NEGATIVE COMPUTE WS-A = 0 - A ELSE COMPUTE WS-A = A END-IF. IF B IS NEGATIVE COMPUTE WS-B = 0 - B ELSE COMPUTE WS-B = B END-IF. COMPUTE WS-DIFFERENCE = A - B. IF A IS NEGATIVE COMPUTE WS-DIFFERENCE = 0 - WS-DIFFERENCE END-IF.
stodolas

Active Member

Joined: 13 Jun 2007
Posts: 632
Location: Wisconsin

 Posted: Tue Jan 29, 2008 6:35 pm Phil gave the easiest and most elegant answer this other code is just reinventing the wheel and not really straight forward.
enrico-sorichetti

Superior Member

Joined: 14 Mar 2007
Posts: 10866
Location: italy

 Posted: Tue Jan 29, 2008 6:49 pm It would be nice and rewarding for the responders if the O/P would care to clarify his question from the original question I guess that the O/P wants also the sign of the first operand diff = sign(A) * abs( abs(A) - abs(B) ) ... who knows ... ok about the absolute value of the difference of the absolute values, but why the sign of the first operand ???
AJAYREDDY

New User

Joined: 17 Feb 2007
Posts: 52
Location: USA

 Posted: Tue Feb 05, 2008 9:21 pm Thanks everyone. I did same as ABS function and manipulated the results which I need.
dick scherrer

Moderator Emeritus

Joined: 23 Nov 2006
Posts: 19244
Location: Inside the Matrix

 Posted: Tue Feb 05, 2008 9:45 pm Cool Thanks for letting us know it is working. d
 View Bookmarks All times are GMT + 6 Hours

 Topic Forum Replies Similar Topics Timestamp difference and its average ... DB2 11 Difference when accessing dataset in ... JCL & VSAM 7 Finding Assembler programs PL/I & Assembler 5 Finding faulty logic Subscript out of... COBOL Programming 5 JCL with variables JCL & VSAM 1
Search our Forums:

 IBMMainframes.com is not an official and/or affiliated with IBM® in anyway Board Rules | FAQ | Downloads | Wiki | SiteMap | Contact Us