www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - next power of 2

reply "ref2401" <refactor24 gmail.com> writes:
is there any Phobos function to calculate the next power of 2 of 
the specified number?
Oct 06 2012
next sibling parent Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 10/6/12 4:48 PM, ref2401 wrote:
 is there any Phobos function to calculate the next power of 2 of the
 specified number?

Use 1U << bsr(x). http://dlang.org/phobos/core_bitop.html#bsr Andrei
Oct 06 2012
prev sibling next sibling parent reply Dmitry Olshansky <dmitry.olsh gmail.com> writes:
On 07-Oct-12 00:48, ref2401 wrote:
 is there any Phobos function to calculate the next power of 2 of the
 specified number?

No though it's reinvented in a couple of places I think. Anyway this should work for unsigned numbers: import core.bitop; T nextPow2(T)(T x){ return x == 0 ? 1 : 1^^(bsr(x)+1); } -- Dmitry Olshansky
Oct 06 2012
next sibling parent reply Dmitry Olshansky <dmitry.olsh gmail.com> writes:
On 07-Oct-12 00:54, Dmitry Olshansky wrote:
 On 07-Oct-12 00:48, ref2401 wrote:
 is there any Phobos function to calculate the next power of 2 of the
 specified number?

No though it's reinvented in a couple of places I think. Anyway this should work for unsigned numbers: import core.bitop; T nextPow2(T)(T x){ return x == 0 ? 1 : 1^^(bsr(x)+1); }

Yikes, 1<<(bsr(x)+1) or 2 ^^ (bsr(x)+1) ... still haven't got used to 2^^x notation compared to shifts. -- Dmitry Olshansky
Oct 06 2012
parent reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 10/6/12 4:57 PM, Dmitry Olshansky wrote:
 On 07-Oct-12 00:54, Dmitry Olshansky wrote:
 On 07-Oct-12 00:48, ref2401 wrote:
 is there any Phobos function to calculate the next power of 2 of the
 specified number?

No though it's reinvented in a couple of places I think. Anyway this should work for unsigned numbers: import core.bitop; T nextPow2(T)(T x){ return x == 0 ? 1 : 1^^(bsr(x)+1); }

Yikes, 1<<(bsr(x)+1) or 2 ^^ (bsr(x)+1) ... still haven't got used to 2^^x notation compared to shifts.

That's right, apologies for my buggy suggestion and my suggestion of a buggy suggestion :o). Andrei
Oct 06 2012
parent Dmitry Olshansky <dmitry.olsh gmail.com> writes:
On 07-Oct-12 00:58, Andrei Alexandrescu wrote:
 On 10/6/12 4:57 PM, Dmitry Olshansky wrote:
 On 07-Oct-12 00:54, Dmitry Olshansky wrote:
 On 07-Oct-12 00:48, ref2401 wrote:
 is there any Phobos function to calculate the next power of 2 of the
 specified number?

No though it's reinvented in a couple of places I think. Anyway this should work for unsigned numbers: import core.bitop; T nextPow2(T)(T x){ return x == 0 ? 1 : 1^^(bsr(x)+1); }

Yikes, 1<<(bsr(x)+1) or 2 ^^ (bsr(x)+1) ... still haven't got used to 2^^x notation compared to shifts.

That's right, apologies for my buggy suggestion and my suggestion of a buggy suggestion :o).

Post of the day :) -- Dmitry Olshansky
Oct 06 2012
prev sibling parent Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 10/6/12 4:54 PM, Dmitry Olshansky wrote:
 On 07-Oct-12 00:48, ref2401 wrote:
 is there any Phobos function to calculate the next power of 2 of the
 specified number?

No though it's reinvented in a couple of places I think. Anyway this should work for unsigned numbers: import core.bitop; T nextPow2(T)(T x){ return x == 0 ? 1 : 1^^(bsr(x)+1); }

That's right, apologies for my buggy suggestion. Andrei
Oct 06 2012
prev sibling parent "bearophile" <bearophileHUGS lycos.com> writes:
On Saturday, 6 October 2012 at 21:00:57 UTC, ref2401 wrote:
 is there any Phobos function to calculate the next power of 2 
 of the specified number?

See: http://d.puremagic.com/issues/show_bug.cgi?id=6343 Bye, bearophile
Oct 06 2012