Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: a question about speed

Author: Robert Hyatt

Date: 06:31:16 01/06/03

Go up one level in this thread


On January 06, 2003 at 00:32:27, Walter Faxon wrote:

>On January 05, 2003 at 21:50:08, Robert Hyatt wrote:
>
>>On January 05, 2003 at 15:55:25, Walter Faxon wrote:
>>
>>>On January 04, 2003 at 23:32:43, Robert Hyatt wrote:
>>>
>>>>On January 04, 2003 at 15:32:40, Walter Faxon wrote:
>>>>
>>>>>On January 03, 2003 at 19:52:06, Matt Taylor wrote:
>>>
>>><snip>
>>>
>>>>>>The compiler -should- recognize that 2 * to = to << 1
>>>>>
>>>>>ONLY IF 'to' is guaranteed positive.  Try:  "2 * (unsigned)to".  Or explicit
>>>>>shifting is always ok in my book.  Use a comment or #if'ed-out debug code if you
>>>>>want to keep things clear.
>>>>>
>>>>
>>>>I'm missing something...
>>>>
>>>>-1<<1 is the same thing as -1*2...  whether it is positive or negative does
>>>>not matter at all.
>>>
>>><snip>
>>>
>>>Sorry.  Leftshift always ok for integer multiply by power of 2.  It's rightshift
>>>for divide by power of 2 that requires an unsigned operand.  Mea culpa.
>>>
>>>-- Walter
>>
>>
>>Actually right shift is also ok if the initial value is <= -2...  :)
>
>
>Arithmetic right shift results in a divide by the given power of two, "rounding
>down" rather than the expected "rounding towards zero", e.g.,
>
>    ( n  / 2) == result
>    ( 5 >> 1) ==  2
>    ( 4 >> 1) ==  2
>    ( 3 >> 1) ==  1
>    ( 2 >> 1) ==  1
>    ( 1 >> 1) ==  0
>    ( 0 >> 1) ==  0
>    (-1 >> 1) == -1
>    (-2 >> 1) == -1
>    (-3 >> 1) == -2
>    (-4 >> 1) == -2
>    (-5 >> 1) == -3
>
>So, yes, it always works, but for negative numbers it might not produce what you
>expect.


You are right there, I didn't think about the rounding issue...




This page took 0 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.