Ruud H.G. van Tol on Sat, 05 Jul 2025 22:16:28 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: flags in a bitmap



On 2025-07-05 15:40, Ruud H.G. van Tol wrote:

On 2025-07-04 16:04, Ruud H.G. van Tol wrote:
On 2025-07-04 10:06, Bill Allombert wrote:
> I can do a git branch if you want to test:
>
> ? install(bitset,vWL)
> ? x=2^(2^20);
> ? forprime(p=2,2^20,bitset(~x,p))
>   ***   last result computed in 8 ms.
> ? my(S=0);for(i=0,2^20-1,S+=bittest(x,i));S
> %16 = 82025
>   ***   last result computed in 159 ms.

To set a base, first a pure-pari test:

? { my( bitset(~v,p)=v[1]=bitor(v[1],2^p), L=2^20, x=[2^L], s=0 );
    forprime(p=2,L-1, bitset(~x,p));
    for(i=0,L-1, s+=bittest(x[1],i));
    print(s);
}

82025
cpu time = 1,857 ms, real time = 1,861 ms.

Now similar on the freshly patched gp:

? { my( L=2^20, x=2^L, s=0 );
    forprime(p=2,L-1, bitset(~x,p));
    for(i=0,L-1, s+=bittest(x,i));
    print(s);
}

82025
time = 135 ms.

On the latest code:

{ my( bitset(~v,p)=v[1]=bitor(v[1],2^p), L=2^20, x=[2^L], s=0 );
    forprime(p=2,L-1, bitset(~x,p));
    for(i=0,L-1, s+=bittest(x[1],i));
    print(s);
}

82025
time = 1,005 ms.


{ my( L=2^20, x=2^L, s=0 );
    forprime(p=2,L-1, bitset(~x,p));
    for(i=0,L-1, s+=bittest(x,i));
    print(s);
}
82025
time = 128 ms.

-- Ruud (without gmp)