Is this a buglet? (SmallInteger>>printString related)

Göran Krampe goran at krampe.se
Wed May 30 11:01:40 UTC 2007


Hi!

In playing around with SmallInteger>>printString (see
bugs.squeak.org/view.php?id=6512) I tested this code for calculating the
length of the String:

    self log truncated + 1

...but that doesn't work. The current code in my ChangeSet uses an
unrolled binary search (nested ifs) which is 7x faster
(#decimalDigitLength) so the above code is not something we would like to
use, but I still wonder why it fails and what I would have needed to do
about it to get it to work:

999 log truncated  ===> 2         As expected.

1000 log           ===> 3.0       As expected.

1000 log truncated ===> 2         Eh, what? Not expected!

...ok, yes, I know - Floats are the "tar pits of hell" when it comes to
expected results - but... can someone answer if this is a bug or if I
simply can't expect this code to work?

regards, Göran

PS. Strongtalk does in fact do SmallInteger>>printString almost exactly
like my enhancement does (didn't peek, promise!) but does it around 5x
faster than Squeak. :) I fired it up to look at how it does #log but log
wasn't implemented. On the other hand Bryce tested Exupery on my code and
it made a real difference - at least 2x better (not sure if he only tested
printString). And then he mentioned an obvious improvement in Exupery that
would make it even faster. Interesting method for comparing!




More information about the Squeak-dev mailing list