Nicolas Cellier uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-nice.646.mcz
==================== Summary ====================
Name: Kernel-nice.646 Author: nice Time: 29 October 2011, 3:25:43.994 pm UUID: cd46101c-40a4-49fd-b358-a8d0c555810f Ancestors: Kernel-nice.645
There might be a best inexact square root approximation than Float infinity to some LargePositiveInteger in the range (1<<54-1<<970 to: 1<<54-1<<1994)
=============== Diff against Kernel-nice.645 ===============
Item was changed: ----- Method: Integer>>sqrt (in category 'mathematical functions') ----- sqrt "Answer the square root of the receiver."
| selfAsFloat floatResult guess | selfAsFloat := self asFloat. floatResult := selfAsFloat sqrt.
floatResult isInfinite ifFalse: [ guess := floatResult truncated.
"If got an exact answer, answer it. Otherwise answer float approximate answer." guess squared = self ifTrue: [ ^ guess ]].
"In this case, maybe it failed because we are such a big integer that the Float method becomes inexact, even if we are a whole square number. So, try the slower but more general method" selfAsFloat >= Float maxExactInteger asFloat squared ifTrue: [ guess := self sqrtFloor. guess squared = self ifTrue: [ + ^guess ]. + + "Nothing else can be done. No exact answer means answer must be a Float. + Answer the best we have which is the rounded sqrt." + guess := (self * 4) sqrtFloor. + ^(guess // 2 + (guess \ 2)) asFloat]. - ^guess ]].
"We need an approximate result" ^floatResult!
Item was changed: ----- Method: LargePositiveInteger>>sqrt (in category 'mathematical functions') ----- sqrt "If we know for sure no exact solution exists, then just answer the cheap float approximation without wasting time." + | selfAsFloat | + self mightBeASquare + ifFalse: + [selfAsFloat := self asFloat. + selfAsFloat isFinite ifTrue: [^self asFloat sqrt ]]. - self mightBeASquare ifFalse: [ - ^self asFloat sqrt ].
+ "If some exact solution might exist, or self asFloat isInfinite, call potentially expensive super" - "If some exact solution might exist, call potentially expensive super" ^super sqrt!
packages@lists.squeakfoundation.org