Ruud H.G. van Tol on Sat, 05 Jul 2025 17:40:35 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: flags in a bitmap |
On 2025-07-04 16:57, Ruud H.G. van Tol wrote:
On 2025-07-04 16:16, Ruud H.G. van Tol wrote:[switched from user to dev] On 2025-07-04 15:51, Bill Allombert wrote:On Fri, Jul 04, 2025 at 12:38:59PM +0200, Ruud H.G. van Tol wrote:? 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.That indeed looks good, and I can test it.Great, I have made a GIT branch bill-bitsetcommit 8632eaf7528554234aaa90d9a503476452cbd736 (HEAD -> bill-bitset, origin/bill-bitset, master)Author: Bill Allombert <Bill.Allombert@math.u-bordeaux.fr> Date: Thu Jul 3 23:57:00 2025 +0200 New GP functions bitset, bitclearThanks. First (minor) remark: -Help: bitclear(~n,i): clear bit i of n (in place) +Help: bitclear(~x,n): clear bit n of x (in place) -Help: bitset(~n,i): set bit i of n in place +Help: bitset(~x,n): set bit n of x in place to align it with bittest, and with the code.And of course another: diff --git a/src/headers/paridecl.h b/src/headers/paridecl.h +void bitclear(GEN x, long i); +void bitset(GEN x, long i); long bittest(GEN x, long n); Those long i's might also want to be n's.
These 3 are less equally worded than I would expect: -Help: bitclear(~x,n): clear bit n of x (in place) =Help: bitflip(~x,n): flip bit n of x in place, assuming x >= 2^n. -Help: bitset(~x,n): set bit n of x in place, assuming x>=2^n. +Help: bitclear(~x,n): clear bit n of x in place, assuming x >= 2^n. =Help: bitflip(~x,n): flip bit n of x in place, assuming x >= 2^n. +Help: bitset(~x,n): set bit n of x in place, assuming x >= 2^n. This looks special to me: ? my(x=2^4); print(x); bitclear(x,4); print(x); 16 Vecsmall([]) ? my(x=2^4); print(x); bitflip(x,4); print(x); 16 Vecsmall([]) as I expected 0. -- Ruud