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]!
packages@lists.squeakfoundation.org