Rockbox.org home
release
dev builds
extras
themes manual
wiki
device status forums
mailing lists
IRC bugs
patches
dev guide



Rockbox mail archive

Subject: Re: math

Re: math

From: Ray Lambert <listlizard_at_interthingy.net>
Date: 2005-07-07

Dave Wiard wrote:
> Ray Lambert wrote:
>> BlueChip wrote:
>>
>>> while (x>0) r = (r<<3)+(r<<1); // r*8 + r*2
>>> ^whoops
>>>
>>> what values of 'x' ? all positive? include 0?
>>>
>>> if (x<0) return(0); // cannot handle negative values of x
>>> if (x>9) return(-1); // result will be > (2^32)-1
>>> unsigned long r = 1;
>>> while (x>0) r = (r<<4)+(r<<1); // r*8 + r*2
>>> return (r);
>>
>> It might be a good idea to decrement x at some point too.... :)
>>
>>> while (x>0) r = (r<<3)+(r<<1); // r*8 + r*2
>>
>> perhaps:
>>
>> for (; x>0; --x) r = (r<<3)+(r<<1); // r*8 + r*2
>>
>> ~ray
>
> And catch x=0. And set your base at 10 not 1 (remember, this is exp10).
>
> if (x == 0) return 1; // 10^0 is always 1
> if (x < 0) return 0; // cannot handle negative values of x
> if (x > 9) return -1; // result will be > (2^32)-1
> unsigned long r = 10;
> while (--x) r = (r << 3) + (r << 1); // r*8 + r*2
> return r;
>
> Dave

Actually, his code did catch that. If x==0 on entry the loop doesn't
execute and r is returned (with 1). If x==1 on entry the loop executes
once and r is multplied by 10 (making 10) and returned.

Your code is right also. You code optimizes for speed (one less multiply)
but is longer. His code has slightly smaller code size at the expense of
one additional multiply.

If the possible values of x are really as limited as someone suggested
they were, then the look-up table approach is the best for both code size
and speed.

~ray

-- 
Politicians and diapers have one thing in common. They should both be
changed regularly, and for the same reason.
_______________________________________________
http://cool.haxx.se/mailman/listinfo/rockbox
Received on Thu Jul 7 17:47:31 2005

Page was last modified "Jan 10 2012" The Rockbox Crew
aaa