[fpc-pascal] two small ?s - high(real) and nearest 2^x

Aleksa Todorovic alexione at gmail.com
Sat Oct 10 21:09:33 CEST 2009


On Sat, Oct 10, 2009 at 20:58, Matthias K. <makadev at googlemail.com> wrote:
> On Sat, Oct 10, 2009 at 7:14 PM, David Emerson <dle3ab at angelbase.com> wrote:
>> 2. For the purposes of reserving memory in block sizes that can be
>> easily reallocated, I like to use powers of two. So if I have, e.g., a
>> dynamic array, I might start with a size of 1024 and then double it
>> when it hits capacity. Hopefully this smoothes memory management, as I
>> am using a lot of memory...
>>
>> Anyway, what I'd like is a simple function that can quickly identify the
>> next power-of-two larger than an arbitrary number. So if I feed the
>> function 472, it will return 512. Thus far I haven't been able to
>> figure out how to do this without a big if-then-else nest. Is there
>> some clever way to request that the processor return the position of
>> the leftmost '1' in 00101101?
>
> invalue := 412;
> --
> outvalue := 1;
> while invalue <> 0 do
> begin
>  invalue := invalue div 2;
>  outvalue := outvalue*2;
> end;
> --

On x86 processors, there is bsr instruction which finds index of the
most significant bit set. You just need some simple asm coding to use
it.


> regards,
>  Matthias
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>



-- 
Aleksa Todorovic - Lead Programmer
Eipix Entertainment
http://www.eipix.com/



More information about the fpc-pascal mailing list