Fraction.st
changeset 5322 411b6c0f7250
parent 4658 1a74754fbe91
child 5364 a27f5167822c
--- a/Fraction.st	Fri Mar 24 12:53:57 2000 +0100
+++ b/Fraction.st	Fri Mar 24 12:54:44 2000 +0100
@@ -41,17 +41,17 @@
     (for exact division).
 
     Mixed mode arithmetic:
-        fraction op fraction    -> fraction
-        fraction op fix         -> fix; scale is fix's scale
-        fraction op integer     -> fraction
-        fraction op float       -> float
+	fraction op fraction    -> fraction
+	fraction op fix         -> fix; scale is fix's scale
+	fraction op integer     -> fraction
+	fraction op float       -> float
 
     [author:]
-        Claus Gittinger
+	Claus Gittinger
 
     [see also:]
-        Number
-        Float Integer FixedPoint 
+	Number
+	Float Integer FixedPoint 
 "
 ! !
 
@@ -81,29 +81,29 @@
 
     /* this check allows subclassing .. */
     if (self == Fraction) {
-        if (__bothSmallInteger(num, den)) {
-            if (__CanDoQuickAlignedNew(sizeof(struct __fraction))) {	/* OBJECT ALLOCATION */
-                OBJ newFraction;
-                int spc;
+	if (__bothSmallInteger(num, den)) {
+	    if (__CanDoQuickAlignedNew(sizeof(struct __Fraction))) {    /* OBJECT ALLOCATION */
+		OBJ newFraction;
+		int spc;
 
-                __qCheckedAlignedNew(newFraction, sizeof(struct __fraction));
-                __InstPtr(newFraction)->o_class = self;
-                if (__intVal(den) < 0) {
-                    __FractionInstPtr(newFraction)->f_numerator = __MKSMALLINT(- __intVal(num));
-                    __FractionInstPtr(newFraction)->f_denominator = __MKSMALLINT(- __intVal(den));
-                } else {
-                    __FractionInstPtr(newFraction)->f_numerator = num;
-                    __FractionInstPtr(newFraction)->f_denominator = den;
-                }
-                if (num == __MKSMALLINT(1)) {
-                    RETURN ( newFraction );
-                }
-            }
-        }
+		__qCheckedAlignedNew(newFraction, sizeof(struct __Fraction));
+		__InstPtr(newFraction)->o_class = self;
+		if (__intVal(den) < 0) {
+		    __FractionInstPtr(newFraction)->f_numerator = __MKSMALLINT(- __intVal(num));
+		    __FractionInstPtr(newFraction)->f_denominator = __MKSMALLINT(- __intVal(den));
+		} else {
+		    __FractionInstPtr(newFraction)->f_numerator = num;
+		    __FractionInstPtr(newFraction)->f_denominator = den;
+		}
+		if (num == __MKSMALLINT(1)) {
+		    RETURN ( newFraction );
+		}
+	    }
+	}
     }
 %}.
     newFraction isNil ifTrue:[
-        newFraction :=  self basicNew setNumerator:num denominator:den.
+	newFraction :=  self basicNew setNumerator:num denominator:den.
     ].
     ^ newFraction reduced
 ! !
@@ -114,8 +114,8 @@
     "return the constant pi as Fraction"
 
     ^ self 
-        numerator:  31415926535897932384626434
-        denominator:10000000000000000000000000
+	numerator:  31415926535897932384626434
+	denominator:10000000000000000000000000
 
     "
      Fraction pi         
@@ -175,18 +175,18 @@
     |n d|
 
     (aNumber isMemberOf:SmallInteger) ifTrue:[
-        ^ (self class numerator:(numerator * aNumber)
-                    denominator:denominator)
+	^ (self class numerator:(numerator * aNumber)
+		    denominator:denominator)
     ].
     aNumber isFraction ifTrue:[
-        aNumber isFixedPoint ifFalse:[  "/ the value was corrent, but the scale is lost
-            n := numerator * aNumber numerator.
-            d := denominator * aNumber denominator.
-            ^ (self class numerator:n denominator:d)
-        ]
+	aNumber isFixedPoint ifFalse:[  "/ the value was corrent, but the scale is lost
+	    n := numerator * aNumber numerator.
+	    d := denominator * aNumber denominator.
+	    ^ (self class numerator:n denominator:d)
+	]
     ].
     (aNumber isMemberOf:Float) ifTrue:[
-        ^ (numerator * aNumber) / denominator
+	^ (numerator * aNumber) / denominator
     ].
     ^ aNumber productFromFraction:self
 
@@ -199,26 +199,26 @@
     |n d|
 
     (aNumber isMemberOf:SmallInteger) ifTrue:[
-        ^ (self class numerator:(numerator + (denominator * aNumber))
-                    denominator:denominator)
+	^ (self class numerator:(numerator + (denominator * aNumber))
+		    denominator:denominator)
     ].
     aNumber isFraction ifTrue:[
-        aNumber isFixedPoint ifFalse:[  "/ the value was corrent, but the scale is lost
-            n := aNumber numerator.
-            d := aNumber denominator.
+	aNumber isFixedPoint ifFalse:[  "/ the value was corrent, but the scale is lost
+	    n := aNumber numerator.
+	    d := aNumber denominator.
 
-            "save a multiplication if possible"
-            denominator == d ifTrue:[
-                n := numerator + n
-            ] ifFalse:[
-                n := (numerator * d) + (n * denominator).
-                d := denominator * d.
-            ].
-            ^ (self class numerator:n denominator:d)
-        ]
+	    "save a multiplication if possible"
+	    denominator == d ifTrue:[
+		n := numerator + n
+	    ] ifFalse:[
+		n := (numerator * d) + (n * denominator).
+		d := denominator * d.
+	    ].
+	    ^ (self class numerator:n denominator:d)
+	]
     ].
     (aNumber isMemberOf:Float) ifTrue:[
-        ^ aNumber + (numerator asFloat / denominator asFloat)
+	^ aNumber + (numerator asFloat / denominator asFloat)
     ].
     ^ aNumber sumFromFraction:self
 
@@ -231,26 +231,26 @@
     |n d|
 
     (aNumber isMemberOf:SmallInteger) ifTrue:[
-        ^ (self class numerator:(numerator - (denominator * aNumber))
-                    denominator:denominator)
+	^ (self class numerator:(numerator - (denominator * aNumber))
+		    denominator:denominator)
     ].
     aNumber isFraction ifTrue:[
-        aNumber isFixedPoint ifFalse:[  "/ the value was corrent, but the scale is lost
-            n := aNumber numerator.
-            d := aNumber denominator.
+	aNumber isFixedPoint ifFalse:[  "/ the value was corrent, but the scale is lost
+	    n := aNumber numerator.
+	    d := aNumber denominator.
 
-            "save a multiplication if possible"
-            denominator == d ifTrue:[
-                n := numerator - n
-            ] ifFalse:[
-                n := (numerator * d) - (n * denominator).
-                d := denominator * d
-            ].
-            ^ (self class numerator:n denominator:d)
-        ]
+	    "save a multiplication if possible"
+	    denominator == d ifTrue:[
+		n := numerator - n
+	    ] ifFalse:[
+		n := (numerator * d) - (n * denominator).
+		d := denominator * d
+	    ].
+	    ^ (self class numerator:n denominator:d)
+	]
     ].
     (aNumber isMemberOf:Float) ifTrue:[
-        ^ (numerator asFloat / denominator asFloat) - aNumber
+	^ (numerator asFloat / denominator asFloat) - aNumber
     ].
     ^ aNumber differenceFromFraction:self
 
@@ -271,18 +271,18 @@
     |n d|
 
     (aNumber isMemberOf:SmallInteger) ifTrue:[
-        ^ (self class numerator:numerator
-                    denominator:(denominator * aNumber))
+	^ (self class numerator:numerator
+		    denominator:(denominator * aNumber))
     ].
     aNumber isFraction ifTrue:[
-        aNumber isFixedPoint ifFalse:[  "/ the value was corrent, but the scale is lost
-            n := numerator * aNumber denominator.
-            d := denominator * aNumber numerator.
-            ^ (self class numerator:n denominator:d)
-        ]
+	aNumber isFixedPoint ifFalse:[  "/ the value was corrent, but the scale is lost
+	    n := numerator * aNumber denominator.
+	    d := denominator * aNumber numerator.
+	    ^ (self class numerator:n denominator:d)
+	]
     ].
     (aNumber isMemberOf:Float) ifTrue:[
-        ^ numerator / (denominator * aNumber)
+	^ numerator / (denominator * aNumber)
     ].
     ^ aNumber quotientFromFraction:self
 
@@ -310,8 +310,8 @@
     "optional - could use inherited method ..."
 
     ^ self class 
-        numerator:(numerator negated)
-        denominator:denominator
+	numerator:(numerator negated)
+	denominator:denominator
 
     "Modified: 5.11.1996 / 10:29:11 / cg"
 !
@@ -321,8 +321,8 @@
 
     numerator == 1 ifTrue:[^ denominator].
     ^ self class 
-        numerator:denominator
-        denominator:numerator
+	numerator:denominator
+	denominator:numerator
 
     "Modified: 5.11.1996 / 10:29:22 / cg"
 ! !
@@ -413,17 +413,17 @@
     |d n|
 
     (aNumber isMemberOf:SmallInteger) ifTrue:[
-        ^ numerator < (denominator * aNumber)
+	^ numerator < (denominator * aNumber)
     ].
     aNumber isFraction ifTrue:[
-        d := aNumber denominator.
-        n := aNumber numerator.
+	d := aNumber denominator.
+	n := aNumber numerator.
 
-        "/ save a multiplication if possible
-        d == denominator ifTrue:[
-            ^ numerator < n
-        ].
-        ^ (numerator * d) < (denominator * n)
+	"/ save a multiplication if possible
+	d == denominator ifTrue:[
+	    ^ numerator < n
+	].
+	^ (numerator * d) < (denominator * n)
     ].
     ^ aNumber lessFromFraction:self
 
@@ -435,16 +435,16 @@
      as the receiver, false otherwise"
 
     (aNumber isMemberOf:SmallInteger) ifTrue:[
-        (denominator = 1) ifFalse:[^ false].
-        ^ numerator = aNumber
+	(denominator = 1) ifFalse:[^ false].
+	^ numerator = aNumber
     ].
     aNumber isFraction ifTrue:[
-        (numerator = aNumber numerator) ifFalse:[^ false].
-        ^ denominator = aNumber denominator
+	(numerator = aNumber numerator) ifFalse:[^ false].
+	^ denominator = aNumber denominator
     ].
     (aNumber isInteger) ifTrue:[
-        (denominator = 1) ifFalse:[^ false].
-        ^ numerator = aNumber
+	(denominator = 1) ifFalse:[^ false].
+	^ numerator = aNumber
     ].
     ^ self retry:#= coercing:aNumber
 
@@ -459,17 +459,17 @@
     |d n|
 
     (aNumber isMemberOf:SmallInteger) ifTrue:[
-        ^ numerator > (denominator * aNumber)
+	^ numerator > (denominator * aNumber)
     ].
     aNumber isFraction ifTrue:[
-        d := aNumber denominator.
-        n := aNumber numerator.
+	d := aNumber denominator.
+	n := aNumber numerator.
 
-        "/ save a multiplication if possible
-        d == denominator ifTrue:[
-            ^ numerator > n
-        ].
-        ^ (numerator * d) > (denominator * n)
+	"/ save a multiplication if possible
+	d == denominator ifTrue:[
+	    ^ numerator > n
+	].
+	^ (numerator * d) > (denominator * n)
     ].
     ^ self retry:#> coercing:aNumber
 
@@ -510,8 +510,8 @@
     "sent when an integer does not know how to subtract the receiver, a fraction"
 
     ^ (self class 
-        numerator:((anInteger * denominator) - numerator)
-        denominator:denominator)
+	numerator:((anInteger * denominator) - numerator)
+	denominator:denominator)
 
     "Modified: 28.7.1997 / 19:08:53 / cg"
 !
@@ -532,8 +532,8 @@
     "sent when an integer does not know how to multiply the receiver, a fraction"
 
     ^ (self class 
-        numerator:(anInteger * numerator)
-        denominator:denominator)
+	numerator:(anInteger * numerator)
+	denominator:denominator)
 
     "Modified: 28.7.1997 / 19:06:22 / cg"
 !
@@ -548,8 +548,8 @@
     "sent when an integer does not know how to divide by the receiver, a fraction"
 
     ^ (self class 
-        numerator:(anInteger * denominator)
-        denominator:numerator)
+	numerator:(anInteger * denominator)
+	denominator:numerator)
 
     "Modified: 28.7.1997 / 19:08:46 / cg"
 !
@@ -564,8 +564,8 @@
     "sent when an integer does not know how to add the receiver, a fraction"
 
     ^ (self class 
-        numerator:(numerator + (anInteger * denominator))
-        denominator:denominator)
+	numerator:(numerator + (anInteger * denominator))
+	denominator:denominator)
 
     "Modified: 28.7.1997 / 19:08:40 / cg"
 ! !
@@ -592,8 +592,8 @@
 
     den := denominator.
     den < 0 ifTrue:[
-        numerator := numerator negated.
-        den := denominator := den negated.
+	numerator := numerator negated.
+	den := denominator := den negated.
     ].
 
     den == 1 ifTrue:[^ numerator].
@@ -602,13 +602,13 @@
 
     gcd := numerator gcd:den.
     (gcd ~~ 1) ifTrue:[
-        numerator := numerator // gcd.
-        denominator := den := den // gcd.
-        den < 0 ifTrue:[
-            numerator := numerator negated.
-            den := denominator := den negated.
-        ].
-        (den == 1) ifTrue:[^ numerator].
+	numerator := numerator // gcd.
+	denominator := den := den // gcd.
+	den < 0 ifTrue:[
+	    numerator := numerator negated.
+	    den := denominator := den negated.
+	].
+	(den == 1) ifTrue:[^ numerator].
     ].
     ^ self
 !
@@ -654,7 +654,7 @@
     "extract the after-decimal fraction part."
 
     numerator < denominator ifTrue:[
-        ^ self
+	^ self
     ].
     ^ super fractionPart
 
@@ -672,7 +672,7 @@
     "extract the pre-decimal integer part."
 
     numerator < denominator ifTrue:[
-        ^ 0
+	^ 0
     ].
     ^ super integerPart
 
@@ -694,9 +694,9 @@
     |t|
 
     self negative ifTrue:[
-        t := self - (1/2)
+	t := self - (1/2)
     ] ifFalse:[
-        t := self + (1/2)
+	t := self + (1/2)
     ].
     ^ t truncated.
 
@@ -730,6 +730,6 @@
 !Fraction class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Fraction.st,v 1.47 1999-09-01 20:00:25 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Fraction.st,v 1.48 2000-03-24 11:54:39 cg Exp $'
 ! !
 Fraction initialize!