Re: Subtract smaller or larger number from x?
- From: "robertwessel2@xxxxxxxxx" <robertwessel2@xxxxxxxxx>
- Date: 29 Mar 2006 16:15:25 -0800
Steve O'Hara-Smith wrote:
On 29 Mar 2006 05:39:29 -0800
upeksharuvani@xxxxxxxxx wrote:
eksamor@xxxxxxxxx wrote:
I have a number x. I would now like to find the difference between this
number x and another number y.
But y can be either larger or smaller than x. Currently I check if the
number y is greater or smaller than x:
int diff; // the difference between x and y
if (y > x){
diff = y-x;
}else{
diff = x-y;
}
is there not a more elegant way to do this when I would like the
difference to be a positive value??
Yes, of course
As my sis pointed out it would be more efficient if you take the
absolute value of the differenc, like this:
And then again it might not be more efficient - consider the
function call overhead and observe that the source code for abs looks like
this:
int
abs(int j)
{
return(j < 0 ? -j : j);
}
So in addition to doing the subtraction and a test it is doing a
function call and perhaps a negation - whereas the original is doing a test
and a subtraction. Seems pretty certain to be less efficient to me.
This version might be more efficient but I doubt it, it probably
compiles to pretty much the same code as the original. It is perhaps a
little prettier.
diff = (y > x) ? y - x : x - y;
Of course that's all totally implementation dependant. MSVC (with
-Ox), for example, generates:
; 7 : z = abs(x-y); (x, y and z are ints)
mov eax, DWORD PTR _x
mov edx, DWORD PTR _y
sub eax, edx
cdq
xor eax, edx
sub eax, edx
mov DWORD PTR _z, eax
abs() is quite commonly inlined, and on many processors there's a way
to do the "abs" function without any conditional code (and often it's a
lot prettier than the cdq/xor/sub sequence above).
.
- References:
- Subtract smaller or larger number from x?
- From: eksamor
- Re: Subtract smaller or larger number from x?
- From: upeksharuvani
- Re: Subtract smaller or larger number from x?
- From: Steve O'Hara-Smith
- Subtract smaller or larger number from x?
- Prev by Date: Re: returning lvalue in C vs C++
- Next by Date: Re: returning lvalue in C vs C++
- Previous by thread: Re: Subtract smaller or larger number from x?
- Next by thread: Re: Subtract smaller or larger number from x?
- Index(es):
Relevant Pages
|