[squeak-dev] The Trunk: Kernel-mt.1417.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Oct 8 07:00:44 UTC 2021


Marcel Taeumel uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-mt.1417.mcz

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

Name: Kernel-mt.1417
Author: mt
Time: 8 October 2021, 9:00:42.746201 am
UUID: 2dbc9442-c2f2-9843-8d3d-077c3f0d4df3
Ancestors: Kernel-eem.1416, Kernel-mt.1413

Merge 8x speed up in #roundUpTo: and #roundDownTo: for integer arguments due to avoiding the creation of intermediate fractions, which also avoids extra GC time.

Thanks to Stephan (stlu) and Levente (ul) for the idea and feedback!

=============== Diff against Kernel-eem.1416 ===============

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 quantum |
+ 	aNumber isInteger ifFalse: [^ super roundTo: aNumber].
+ 	quantum := aNumber abs.
+ 	(rem := self \\ quantum) = 0 ifTrue: [^ self].
+ 	^ (self > 0
+ 		ifTrue: [quantum + 1 // 2 <= rem]
+ 		ifFalse: [quantum // 2 < rem])
+ 			ifTrue: [self + quantum - rem]
+ 			ifFalse: [self - 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]!



More information about the Squeak-dev mailing list