--- a/Number.st Tue Sep 25 15:58:09 2007 +0200
+++ b/Number.st Tue Sep 25 16:10:35 2007 +0200
@@ -483,6 +483,21 @@
^ self subclassResponsibility
!
+epsilonForCloseTo
+ "return the epsilon used in the closeTo: comparison.
+ (useful would be something like self epsilon or epsilon*10,
+ but for Squeak compatibility.... - sigh)"
+
+ ^ 0.0001
+
+ "
+ Float epsilon
+ ShortFloat epsilon
+ Float epsilon10
+ ShortFloat epsilon10
+ "
+!
+
pi
"return Pi in my representation (and accuracy)."
@@ -666,12 +681,35 @@
closeFrom:aNumber
"are these two numbers close?"
+ ^ self closeFrom:aNumber withEpsilon:(self class epsilonForCloseTo)
+
+ "
+ 9.0 closeTo: 8.9999
+ 9.9 closeTo: 9
+ (9/3) closeTo: 2.9999
+ 1 closeTo: 0.9999
+ 1 closeTo: 1.0001
+ 1 closeTo: 1.001
+ 1 closeTo: 0.999
+
+ 0.9999 closeTo: 1
+ 1.0001 closeTo: 1
+ 1.001 closeTo: 1
+ 0.999 closeTo: 1
+ Float NaN closeTo:Float NaN
+ Float infinity closeTo:Float infinity
+ "
+!
+
+closeFrom:aNumber withEpsilon:eps
+ "are these two numbers close?"
+
| fuzz |
self isNaN == aNumber isNaN ifFalse: [^ false].
self isInfinite == aNumber isInfinite ifFalse: [^ false].
- fuzz := (self abs max:aNumber abs) * 0.0001.
+ fuzz := (self abs max:aNumber abs) * eps.
^ (self - aNumber) abs <= fuzz
"
@@ -695,8 +733,22 @@
closeTo:num
"are these two numbers close to each other?"
+ ^ self closeTo:num withEpsilon:(self class epsilonForCloseTo)
+
+ "
+ 1 closeTo:1.0000000001
+ 1 closeTo:1.001
+ 1 closeTo:1.001 withEpsilon:0.001
+ "
+
+ "Created: / 5.11.2001 / 18:07:26 / cg"
+!
+
+closeTo:num withEpsilon:eps
+ "are these two numbers close to each other?"
+
num isNumber ifFalse:[^false].
- ^ num closeFrom:self
+ ^ num closeFrom:self withEpsilon:eps
"
1 closeTo:1.0000000001
@@ -726,7 +778,6 @@
^ self rounded printString
! !
-
!Number methodsFor:'coercing & converting'!
i
@@ -1899,5 +1950,5 @@
!Number class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Number.st,v 1.110 2007-05-29 09:31:21 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Number.st,v 1.111 2007-09-25 14:10:35 sr Exp $'
! !