LargeInteger.st
changeset 14766 ae12897bef55
parent 13992 459aea99d16b
child 15132 83d908af0aa1
child 18027 3621469cc5e8
--- a/LargeInteger.st	Fri Feb 08 10:51:37 2013 +0100
+++ b/LargeInteger.st	Fri Feb 08 13:57:01 2013 +0100
@@ -454,7 +454,10 @@
     "return the quotient of the receiver and the argument, aNumber"
 
     aNumber isInteger ifTrue:[
-	^ Fraction numerator:self denominator:aNumber
+        ^ Fraction numerator:self denominator:aNumber
+    ].
+    aNumber isFraction ifTrue:[
+        ^ Fraction numerator:(self * aNumber denominator) denominator:(aNumber numerator)
     ].
 
     "this is a q&d hack - we loose lots of precision here ..."
@@ -1924,31 +1927,41 @@
     |otherSign|
 
     (aNumber class == self class) ifTrue:[
-	otherSign := aNumber sign.
-
-	(sign > 0) ifTrue:[
-	    "I am positive"
-	    (otherSign > 0) ifTrue:[^ self absLess:aNumber].
-	    ^ false "aNumber is <= 0"
-	].
-	"I am negative"
-	(otherSign > 0) ifTrue:[^ true].
-	(otherSign == 0) ifTrue:[^ true].
-	^ (aNumber absLess:self)
+        otherSign := aNumber sign.
+
+        (sign > 0) ifTrue:[
+            "I am positive"
+            (otherSign > 0) ifTrue:[^ self absLess:aNumber].
+            ^ false "aNumber is <= 0"
+        ].
+        "I am negative"
+        (otherSign > 0) ifTrue:[^ true].
+        (otherSign == 0) ifTrue:[^ true].
+        ^ (aNumber absLess:self)
     ].
     (aNumber class == SmallInteger) ifTrue:[
-	otherSign := aNumber sign.
-
-	(sign > 0) ifTrue:[
-	    "I am positive"
-	    ^ false "aNumber is <= 0"
-	].
-	(sign == 0) ifTrue:[
-	    (otherSign > 0) ifTrue:[^ true].
-	    ^ false
-	].
-	"I am negative"
-	^ true
+        otherSign := aNumber sign.
+
+        (sign > 0) ifTrue:[
+            "I am positive"
+            ^ false "aNumber is <= 0"
+        ].
+        (sign == 0) ifTrue:[
+            (otherSign > 0) ifTrue:[^ true].
+            ^ false
+        ].
+        "I am negative"
+        ^ true
+    ].
+    "/ hack for epsilon tests
+    (aNumber class == Float) ifTrue:[
+        self negative ifTrue:[
+            "/ I am a large negative; so my value is definitely below SmallInteger minVal
+            aNumber >= SmallInteger minVal asFloat ifTrue:[^ true].
+        ] ifFalse:[
+            "/ I am a large positive; so my value is definitely above SmallInteger maxVal
+            aNumber <= SmallInteger maxVal asFloat ifTrue:[^ false].
+        ].
     ].
 
     ^ aNumber lessFromInteger:self
@@ -5157,9 +5170,9 @@
 !LargeInteger class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.204 2012-01-31 11:18:26 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.205 2013-02-08 12:57:01 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.204 2012-01-31 11:18:26 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.205 2013-02-08 12:57:01 cg Exp $'
 ! !