Paul Eggert <egg...@cs.ucla.edu> writes: Fine, but the 128-bit bug is independent of uintmax_t. Suppose we change factor.c to never use uintmax_t, and suppose we have a (theoretical but allowed) platform where unsigned long is 128 bits and where factor.c uses that type for its words. Then before my Saturday coreutils commit[1], this code in prime_p:
/* We have already cast out small primes. */ if (n < (wide_uint) FIRST_OMITTED_PRIME * FIRST_OMITTED_PRIME) return true; was incorrect. Why is it incorrect? I read you change, and I strongly disgree with it. I actually find it extremely worrying that a change is motivated by "We don't know why the code misbehaves when wide_uint is wider;" and then the presumed bug is masked with a pretty questionable change. Really? How about debugging it? Furthernorem tinkering with mature code for porting it to something with does not exist and likely will never exist, is a bad idea. No, we are very unlikely to see systems with 128x128->256 bit hardware multiply support, which is the only case where forcing factor.c to do 128-bit arithmetic. Let's use our time and effort on improving things for the word we live in. -- Torbjörn Please encrypt, key id 0xC8601622