Author: Robert Hyatt
Date: 07:34:53 07/07/03
Go up one level in this thread
On July 06, 2003 at 14:05:03, Omid David Tabibi wrote:
>On July 06, 2003 at 13:12:25, Robert Hyatt wrote:
>
>>On July 05, 2003 at 10:17:38, Omid David Tabibi wrote:
>>
>>>In Genesis I heavily use the abs() function, and so tried to optimize it.
>>>Instead of using the abs() function defined in <math.h>, I wrote the following
>>>fucntion:
>>>
>>>long abs(long x) {
>>> long y;
>>> y = x >> 31;
>>> return (x ^ y) - y;
>>>}
>>>
>>>Testing it using a profiler, I found out that my implementation is about twice
>>>slower than the math.h implementation of abs(). I haven't looked at the
>>>implementation in math.h, but I can't see how a more optimized version of abs()
>>>can be written.
>>>
>>>Any ideas?
>>
>>
>>#define abs(x) ((x<0) ? -x : x)
>>
>>I think the compiler will do that about as well as anything can be done, if
>>you have a good compiler. No branch needed if it is optimized right.
>
>What's the difference between the above macro and the function
>
>int simple_abs (int i) {
> return (i >= 0) ? i : -i;
>}
>
>when inlined?
No difference that I know of, if you have inlining enabled.
>
>Russel's test (http://talkchess.com/forums/1/message.html?304930) shows that
>this simple_abs() is slow in comparison to various other abs implementations.
Maybe it depends on the compiler too. Using CMOV ought to make this as fast
as any other approach.
This page took 0.01 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.