On Sat, 2009-10-10 at 10:14 -0700, David Emerson 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?
On the processor level, if it is an x86, you can use "bsr" (bit scan reverse). Other processors may have similar instructions. I don't know if this is somehow mapped to an RTL function. In pure pascal, use a loop to determine the magnitude, something like (omitting the details): repeat requested := requested shr 1; inc(magnitude); until requested=0; Anton _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal