|
Boost : |
From: Gennaro Prota (gennaro_prota_at_[hidden])
Date: 2003-01-24 16:21:26
On Fri, 24 Jan 2003 22:23:53 +0200, "Vesa Karvonen"
<vesa_karvonen_at_[hidden]> wrote:
>Gennaro Prota:
>>Vesa Karvonen:
>>>Gennaro Prota:
>>>>Vesa, I really appreciate your attempt but your code assumes the
>>>>required number to be a power of two (it just tries 32, 64, 128,
>>>>etc.). What about 48 bits unsigned long?[...]
>>>
>>>If unsigned long has 48 bits, then an n of 32 would be chosen.
>>
>>And then you are not able to calculate log2 for numbers in the range
>>[2**32, 2**48-1[ (at least).
>
>The algorithm calculates log2 correctly even for those numbers. The
>invariant of the core algorithm is that at the start of each recursion 1 <=
>x && x>>n < 1ul<<n.
Maybe you are confusing the value, let's call it w, calculated by
choose_n with the default value used for parameter n (which is w/2 or
(w+1)/2)? If unsigned long has 48 value bits your choose_n template
gives 32 but then you start with n = 16! This means you can, at most,
calculate a logarithm = 31 (i.e. the log of 2**32 - 1). Am I missing
something?
Genny.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk