|Subject:||Primes() i*i loop vs bits=2^32-1|
|Date:||Sat, 06 Nov 2010 07:38:02 +1100|
|From:||Kevin Ryde <email@example.com>|
In Bit::Vector 7.1 BitVector_Primes(), if bits=2^32-1 then I think the i*i in the loop test (j = i * i) < bits may overflow 32 bits. The loop runs i=65535 as it should, but the next i=65537 has i*i wrapping around to 131073, so i*i < bits is satisfied and it doesn't stop as intended. I suspect it may even end up an infinite loop if i*i never comes out equal to "bits". In any case maybe it could have a pre-calculated loop limit like floor(sqrt(bits)), or maybe an extra i <= floor(sqrt(UINT_MAX)) worked in to ensure i*i<=UINT_MAX.