View previous topic :: :: View next topic

Author 
Message 
AJAYREDDY
New User
Joined: 17 Feb 2007 Posts: 47 Location: USA




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 

Back to top 




Phrzby Phil
Active Member
Joined: 31 Oct 2006 Posts: 964 Location: Richmond, Virginia




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. AB = 15, and BA = 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. 

Back to top 


enricosorichetti
Global Moderator
Joined: 14 Mar 2007 Posts: 10274 Location: italy




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 = ??? 

Back to top 


AJAYREDDY
New User
Joined: 17 Feb 2007 Posts: 47 Location: USA




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. AB = 15, and BA = 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 

Back to top 


dick scherrer
Site Director
Joined: 23 Nov 2006 Posts: 19270 Location: Inside the Matrix




Hello,
What should be the "difference" if A=4 and B=11? 

Back to top 


rag swain
New User
Joined: 17 Dec 2007 Posts: 33 Location: pune,INDIA




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? 

Back to top 


AJAYREDDY
New User
Joined: 17 Feb 2007 Posts: 47 Location: USA




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 

Back to top 


Phrzby Phil
Active Member
Joined: 31 Oct 2006 Posts: 964 Location: Richmond, Virginia




ABS(ABS(A)  ABS(B)) 

Back to top 


Ganesh.Deokar
New User
Joined: 30 Sep 2005 Posts: 26 Location: Buffalo,NY




Try this. It's a simple one.
Define 3 more variables(WSFIELD3, WSFIELD4 and WSFIELD5) without sign.
01 WSTEMP.
05 WSFIELD1 PIC 9(2).
05 WSFIELD2 PIC 9(2).
05 WSFIELD3 PIC 9(2).
05 WSFIELD4 PIC 9(2).
05 WSFIELD5 PIC 9(2).
1) Move your input values from WSFIELD1 and WSFIELD2 to WSFIELD3 and WSFIELD4 respectively.
2) Compute the difference between WSFIELD3 and WSFIELD4 in WSFIELD5. 

Back to top 


the_gautam
Active User
Joined: 05 Jun 2005 Posts: 165 Location: Bangalore




IF A IS NEGATIVE
COMPUTE WSA = 0  A
ELSE
COMPUTE WSA = A
ENDIF.
IF B IS NEGATIVE
COMPUTE WSB = 0  B
ELSE
COMPUTE WSB = B
ENDIF.
COMPUTE WSDIFFERENCE = A  B.
IF A IS NEGATIVE
COMPUTE WSDIFFERENCE = 0  WSDIFFERENCE
ENDIF. 

Back to top 


stodolas
Active Member
Joined: 13 Jun 2007 Posts: 632 Location: Wisconsin




Phil gave the easiest and most elegant answer this other code is just reinventing the wheel and not really straight forward. 

Back to top 


enricosorichetti
Global Moderator
Joined: 14 Mar 2007 Posts: 10274 Location: italy




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 ??? 

Back to top 


AJAYREDDY
New User
Joined: 17 Feb 2007 Posts: 47 Location: USA




Thanks everyone. I did same as ABS function and manipulated the results which I need. 

Back to top 


dick scherrer
Site Director
Joined: 23 Nov 2006 Posts: 19270 Location: Inside the Matrix




Cool
Thanks for letting us know it is working.
d 

Back to top 


