Göran Krampe <goran <at> krampe.se> writes:
After messing with SmallInteger>>decimalDigitLength and noticing that '1000 log truncated' returns the wrong answer I ended up chasing down base-10 log algorithms. Found this nice source of tricks:
http://www.hackersdelight.org/HDcode/ilog.c
And based on code in there and the fact that nlz (number of leading zeros) can be computed using 'self asFloat exponent' I came up with this implementation of #floorLog for SmallIntegers. It still is not as fast as simpleminded comparisons as in decimalDigitLength though so it is not worth using. But it was fun to experiment."
Yes, this link is fun. Also don't forget Smalltalk has #highBit, a complement of nlz not involving Float.
Nicolas