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

commits at source.squeak.org commits at source.squeak.org
Fri Oct 8 07:02:30 UTC 2021


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

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

Name: Kernel-mt.1409
Author: mt
Time: 26 August 2021, 11:43:29.370208 am
UUID: 833c07c9-93d9-834e-8e94-59c6a1e941bc
Ancestors: Kernel-eem.1408

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) for the idea!

[65 roundUpTo: 64] bench
AFTER '39,500,000 per second. 25.3 nanoseconds per run. 0 % GC time.' 
BEFORE '5,180,000 per second. 193 nanoseconds per run. 1.67966 % GC time.' 

[65 roundDownTo: 64] bench
AFTER '45,900,000 per second. 21.8 nanoseconds per run. 0 % GC time.' 
BEFORE '5,590,000 per second. 179 nanoseconds per run. 2.29908 % GC time.' 

Needs testing and review. Known issue: "65.0 roundUpTo: 64" now returns "128.0" but used to return "128".

=============== Diff against Kernel-eem.1408 ===============

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"
  		
+ 	^ aNumber isInteger
+ 		ifTrue: [self roundDownToInteger: aNumber]
+ 		ifFalse: [(self/aNumber) floor * aNumber]!
- 	^(self/aNumber) floor * aNumber!

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

Item was added:
+ ----- 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