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

nicolas cellier ncellier at ifrance.com
Wed May 30 20:45:34 UTC 2007


Just tried this very simple one:
(I guess the smaller the merrier)

floorLog10bert
     "from Bert Freundenberg's idea"

     (self negative or: [self isZero])
         ifTrue:
             [^self error: 'Can''t take log of number <= 0'].
	self < 10 ifTrue: [^0].
	self < 100 ifTrue: [^1].
	self < 1000 ifTrue: [^2].
	self < 10000 ifTrue: [^3].
	self < 100000 ifTrue: [^4].
	self < 1000000 ifTrue: [^5].
	self < 10000000 ifTrue: [^6].
	self < 100000000 ifTrue: [^7].
	self < 1000000000 ifTrue: [^8].
	^9 "Based on the fact that (SmallInteger maxVal log: 10) floor = 9"
	

Comparing universal Integer version provided in previous mail and Bert's 
gives a factor 5 at least

Time millisecondsToRun: [1000000 timesRepeat: [SmallInteger maxVal 
floorLog10 ]]. 19846
Time millisecondsToRun: [1000000 timesRepeat: [SmallInteger maxVal 
floorLog10bert ]]. 3790 3777

Ain't that much to gain when reducing number of tests anyway:
Time millisecondsToRun: [1000000 timesRepeat: [1 floorLog10bert ]]. 2563

Seems fast enough not to bother.

Nicolas

Bert Freudenberg a écrit :
> 
> The nested conditionals might still win ... in particular if it was not 
> binary search but based on frequency of numbers.
> 
> - Bert -
> 




More information about the Squeak-dev mailing list