Checking if an Integer is an Exact Binary Power
Andrei Alexandrescu via Digitalmars-d
digitalmars-d at puremagic.com
Mon Apr 25 05:56:27 PDT 2016
On 4/25/16 6:42 AM, Solomon E wrote:
> On Monday, 25 April 2016 at 05:35:12 UTC, Andrei Alexandrescu wrote:
>>
>> With gdc https://godbolt.org/g/jcU4np isPow2B is the winner (shortest
>> code, simplest instructions). -- Andrei
>
> I generalized function isPow2B to work for negative numbers in case of a
> signed type, while keeping the assembly the same or better. (That also
> incidentally made it correctly return false for zero.)
>
>> bool isPow2B(T)(T x)
>> {
>> return (x & -x) > (x - 1);
>> }
>
> bool isPow2F(T)(T x)
> {
> return (x & -x) > (x >>> 1);
> }
>
> assembly diff:
> -- subl $1, %edi
> ++ shrl %edi
>
That's smaller and faster, thanks. But how do you show it is still
correct? -- Andrei
More information about the Digitalmars-d
mailing list