[squeak-dev] The Inbox: Kernel-mt.1411.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Aug 27 06:38:29 UTC 2021


A new version of Kernel was added to project The Inbox:
http://source.squeak.org/inbox/Kernel-mt.1411.mcz

==================== Summary ====================

Name: Kernel-mt.1411
Author: mt
Time: 27 August 2021, 8:38:24.862421 am
UUID: e7c0282d-0324-9342-bd98-477a1ef9a696
Ancestors: Kernel-mt.1410

Move the #round(Up|Down)To: changes down to Integer to not slow-down rounding for Float and Fraction. This also speeds it up a tiny bit more because it is now "inlined" without the extra send to #round(Up|Down)ToInteger:.

Thanks to Levente (ul) for the suggestion! (http://lists.squeakfoundation.org/pipermail/squeak-dev/2021-August/216272.html)

14x speed up of #roundTo: using the same strategy.

[65 roundUpTo: 64] bench
AFTER '31,000,000 per second. 32.2 nanoseconds per run. 0 % GC time.'
BEFORE '2,120,000 per second. 472 nanoseconds per run. 0.73985 % GC time.'

=============== Diff against Kernel-mt.1410 ===============

Item was added:
+ ----- Method: Integer>>roundDownTo: (in category 'truncation and round off') -----
+ roundDownTo: aNumber 
+ 	"Overwritten to speed-up integer rounding via modulo instead of using intermediate fractions."
+ 
+ 	aNumber isInteger ifFalse: [^ super roundDownTo: aNumber].
+ 	^ self - (self \\ aNumber)!

Item was added:
+ ----- Method: Integer>>roundTo: (in category 'truncation and round off') -----
+ roundTo: aNumber 
+ 	"Overwritten to speed-up integer rounding via modulo instead of using intermediate fractions."
+ 
+ 	| rem |
+ 	aNumber isInteger ifFalse: [^ super roundUpTo: aNumber].
+ 
+ 	(rem := self \\ aNumber) = 0 ifTrue: [^ self].
+ 	^ rem < (aNumber // 2)
+ 		ifTrue: ["round down" self - rem]
+ 		ifFalse: ["round up" self + aNumber - rem]!

Item was added:
+ ----- Method: Integer>>roundUpTo: (in category 'truncation and round off') -----
+ roundUpTo: aNumber 
+ 	"Overwritten to speed-up integer rounding via modulo instead of using intermediate fractions."
+ 
+ 	| rem |
+ 	aNumber isInteger ifFalse: [^ super roundUpTo: aNumber].
+ 	^ (rem := self \\ aNumber) ~= 0
+ 		ifTrue: [self + aNumber - rem]
+ 		ifFalse: [self]!

Item was changed:
  ----- Method: Number>>roundDownTo: (in category 'truncation and round off') -----
  roundDownTo: aNumber 
  	"Answer the next multiple of aNumber toward negative infinity that is nearest the 
  	receiver."
   	"Examples:
  		3.1479 roundDownTo: 0.01 -> 3.14
  		3.1479 roundDownTo: 0.1 -> 3.1
  		1923 roundDownTo: 10 -> 1920
  		3.1479 roundDownTo: 0.005 -> 3.145
  		-3.1479 roundDownTo: 0.01 -> -3.15"
  		
+ 	^(self/aNumber) floor * aNumber!
- 	^ aNumber isInteger
- 		ifTrue: [self roundDownToInteger: aNumber]
- 		ifFalse: [(self/aNumber) floor * aNumber]!

Item was removed:
- ----- Method: Number>>roundDownToInteger: (in category 'truncation and round off') -----
- roundDownToInteger: aNumber 
- 
- 	^ self - (self \\ aNumber)!

Item was changed:
  ----- Method: Number>>roundUpTo: (in category 'truncation and round off') -----
  roundUpTo: aNumber 
  	"Answer the next multiple of aNumber toward infinity that is nearest the 
  	receiver."
   	"Examples:
  		3.1479 roundUpTo: 0.01 -> 3.15
  		3.1479 roundUpTo: 0.1 -> 3.2
  		1923 roundUpTo: 10 -> 1930
  		3.1479 roundUpTo: 0.005 -> 3.15
  		-3.1479 roundUpTo: 0.01 -> -3.14"
  
+ 	^(self/aNumber) ceiling * aNumber!
- 	^ aNumber isInteger
- 		ifTrue: [self roundUpToInteger: aNumber]
- 		ifFalse: [(self/aNumber) ceiling * aNumber]!

Item was removed:
- ----- Method: Number>>roundUpToInteger: (in category 'truncation and round off') -----
- roundUpToInteger: aNumber 
- 
- 	| rem |
- 	^ (rem := self \\ aNumber) ~= 0
- 		ifTrue: [self + aNumber - rem]
- 		ifFalse: [self]!



More information about the Squeak-dev mailing list