[Issue 7993] BigInt divide-by-1 error

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Apr 28 03:37:31 PDT 2012


http://d.puremagic.com/issues/show_bug.cgi?id=7993



--- Comment #6 from c.m.brandenburg at gmail.com 2012-04-28 03:38:38 PDT ---
Here's my modified BigUint.divInt() as a proof-of-concept of the fix.

    // return x / y
    static BigUint divInt(T)(BigUint x, T y) if ( is(T==uint) )
    {
        uint [] result = new BigDigit[x.data.length];
        uint b;
        if ((y&(-y))==y)
        {
            assert(y!=0, "BigUint division by zero");
            // perfect power of 2
            for (;y!=1; y>>=1)
            {
                ++b;
            }
        }
        if (1 <= b && b <= 31) {
            multibyteShr(result, x.data, b);
        }
        else
        {
            result[] = x.data[];
            uint rem = multibyteDivAssign(result, y, 0);
        }
        return BigUint(removeLeadingZeros(result));
    }

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list