Garrett Cooper <gcoo...@freebsd.org> wrote: > I was talking to someone today about this macro, and he noted that > the algorithm is incorrect -- it fails the base case with ((x) == 0 -- > which makes sense because 2^(x) cannot equal 0 (mathematically > impossible, unless you consider the limit as x goes to negative > infinity as log (0) / log(2) is undefined).
Integer arithmetic on all platforms FreeBSD supports is in the ring Z_{2^n} for appropriate values of n; and in this ring, 2^n is equal to 0. If you arbitrarily declare that !powerof2(0), then you get into the bizarre situation of powerof2(x) && !powerof2(2*x) for x = 1 << (n - 1); this seems far more astonishing than the well-understood fact that machine arithmetic operates with a modular ring, so it seems to me that your proposed patch would do more harm than good. -- Colin Percival Security Officer, FreeBSD | freebsd.org | The power to serve Founder / author, Tarsnap | tarsnap.com | Online backups for the truly paranoid _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"