View previous topic :: View next topic
|
Author |
Message |
AJAYREDDY
New User
Joined: 17 Feb 2007 Posts: 52 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
Senior Member
Joined: 31 Oct 2006 Posts: 1049 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. 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. |
|
Back to top |
|
|
enrico-sorichetti
Superior Member
Joined: 14 Mar 2007 Posts: 10886 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: 52 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. 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 |
|
Back to top |
|
|
dick scherrer
Moderator Emeritus
Joined: 23 Nov 2006 Posts: 19243 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: 52 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
Senior Member
Joined: 31 Oct 2006 Posts: 1049 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(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. |
|
Back to top |
|
|
the_gautam
Active User
Joined: 05 Jun 2005 Posts: 165 Location: Bangalore
|
|
|
|
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. |
|
Back to top |
|
|
stodolas
Active Member
Joined: 13 Jun 2007 Posts: 631 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 |
|
|
enrico-sorichetti
Superior Member
Joined: 14 Mar 2007 Posts: 10886 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: 52 Location: USA
|
|
|
|
Thanks everyone. I did same as ABS function and manipulated the results which I need. |
|
Back to top |
|
|
dick scherrer
Moderator Emeritus
Joined: 23 Nov 2006 Posts: 19243 Location: Inside the Matrix
|
|
|
|
Cool
Thanks for letting us know it is working.
d |
|
Back to top |
|
|
|