Number.st
changeset 10727 4e6346eb48a9
parent 10556 fb4ea1df1f1d
child 11008 5a92714a522b
--- 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 $'
 ! !