Open meooow25 opened 3 months ago
Good point. Is it possible to avoid the problem by being careful about how we do the comparisons? It's not an issue for 64 bit, but we still (nominally) support 32 bit, and (theoretically) 29 bit.
Is it possible to avoid the problem by being careful about how we do the comparisons?
Well we could replace a * 3 > b
with a > b `quot` 3
. This would likely be a slowdown, benchmarks can tell.
Hmph. That does sound like a slowdown. Checking for overflow would probably be a slowdown too (more work for branch prediction), but what do I know? Changing the documentation is at least easy.
Set
andMap
documentation carry warnings that sayHowever, we multiple sizes by
delta = 3
without caring about overflow when balancing, which means we get violated invariants earlier than that.I doubt anyone will be running into this in practice, but the limit should be document as
maxBound `div` 3
perhaps. Or less, in case there are other potentially troublesome operations I missed.