This article by antirez helped me understand HyperLogLog a couple years ago
http://antirez.com/news/75
Just a small nitpick, for the craic:
> Moreover, while accessing the registers, we need to compute the sum of pow(2,-register) which involves floating point math. > [...] > * The floating point computation was modified in order to allow for multiple operations to be performed in parallel when possible. This was just a matter of adding parens. Floating point math is not commutative, but in this case there was no loss of precision.
Floating point addition is commutative. It is not associative though.