--- a/Fraction.st Thu Aug 25 11:28:17 2016 +0100
+++ b/Fraction.st Wed Aug 31 22:45:49 2016 +0100
@@ -90,73 +90,73 @@
%{ /* NOCONTEXT */
#ifdef __SCHTEAM__
if (self == Fraction.Class) {
- return context._RETURN(new STFraction(num, den));
+ return context._RETURN(new STFraction(num, den));
}
#else
/* this check allows subclassing .. */
if (self == Fraction) {
- if (__bothSmallInteger(num, den)) {
- if (den != __mkSmallInteger(0)) {
- if (__CanDoQuickAlignedNew(sizeof(struct __Fraction))) { /* OBJECT ALLOCATION */
- OBJ newFraction;
- INT iDen;
- INT iNum;
+ if (__bothSmallInteger(num, den)) {
+ if (den != __mkSmallInteger(0)) {
+ if (__CanDoQuickNew(sizeof(struct __Fraction))) { /* OBJECT ALLOCATION */
+ OBJ newFraction;
+ INT iDen;
+ INT iNum;
- __qCheckedAlignedNew(newFraction, sizeof(struct __Fraction));
- __InstPtr(newFraction)->o_class = self;
- __qSTORE(newFraction, self);
+ __qCheckedNew(newFraction, sizeof(struct __Fraction));
+ __InstPtr(newFraction)->o_class = self;
+ __qSTORE(newFraction, self);
- iDen = __intVal(den);
- iNum = __intVal(num);
+ iDen = __intVal(den);
+ iNum = __intVal(num);
- if (iDen < 0) {
- iNum = -iNum;
- iDen = -iDen;
- }
- while ( (((iNum | iDen) & 1) == 0) && ( iNum != 0) && ( iDen != 0)) {
- /* both even and non-zero */
- iNum = iNum >> 1;
- iDen = iDen >> 1;
- }
- if (iNum >= _MAX_INT) {
- __FractionInstPtr(newFraction)->f_numerator = __MKINT(iNum);
- } else {
- __FractionInstPtr(newFraction)->f_numerator = __MKSMALLINT(iNum);
- }
- if (iDen >= _MAX_INT) {
- __FractionInstPtr(newFraction)->f_denominator = __MKINT(iDen);
- } else {
- __FractionInstPtr(newFraction)->f_denominator = __MKSMALLINT(iDen);
- }
- if (iNum == 1) {
- /* no need to reduce */
- RETURN ( newFraction );
- }
- }
- }
- }
+ if (iDen < 0) {
+ iNum = -iNum;
+ iDen = -iDen;
+ }
+ while ( (((iNum | iDen) & 1) == 0) && ( iNum != 0) && ( iDen != 0)) {
+ /* both even and non-zero */
+ iNum = iNum >> 1;
+ iDen = iDen >> 1;
+ }
+ if (iNum >= _MAX_INT) {
+ __FractionInstPtr(newFraction)->f_numerator = __MKINT(iNum);
+ } else {
+ __FractionInstPtr(newFraction)->f_numerator = __MKSMALLINT(iNum);
+ }
+ if (iDen >= _MAX_INT) {
+ __FractionInstPtr(newFraction)->f_denominator = __MKINT(iDen);
+ } else {
+ __FractionInstPtr(newFraction)->f_denominator = __MKSMALLINT(iDen);
+ }
+ if (iNum == 1) {
+ /* no need to reduce */
+ RETURN ( newFraction );
+ }
+ }
+ }
+ }
}
#endif /* not __SCHTEAM__ */
%}.
den = 0 ifTrue:[
- ^ ZeroDivide raiseRequestWith:thisContext.
+ ^ ZeroDivide raiseRequestWith:thisContext.
].
newFraction isNil ifTrue:[
- newFraction := self basicNew setNumerator:num denominator:den.
+ newFraction := self basicNew setNumerator:num denominator:den.
].
^ newFraction reduced
"
- Fraction numerator:1 denominator:3
- Fraction numerator:2 denominator:3
- Fraction numerator:2 denominator:6
+ Fraction numerator:1 denominator:3
+ Fraction numerator:2 denominator:3
+ Fraction numerator:2 denominator:6
Fraction numerator:1 denominator:0 -> error
Fraction numerator:2 denominator:0 -> error
- Fraction numerator:5 denominator:10
- Fraction numerator:50 denominator:100
- Fraction numerator:8 denominator:16
+ Fraction numerator:5 denominator:10
+ Fraction numerator:50 denominator:100
+ Fraction numerator:8 denominator:16
"
"Modified: / 27-02-2016 / 00:25:47 / cg"
@@ -201,24 +201,24 @@
"/ sigh - care for subclasses...
self == Fraction ifFalse:[
- ^ super readFrom:aStringOrStream onError:exceptionBlock
+ ^ super readFrom:aStringOrStream onError:exceptionBlock
].
s := aStringOrStream readStream.
s skipSeparators.
s peekOrNil == $( ifTrue:[
- s next.
+ s next.
].
numerator := super readFrom:s onError:[^ exceptionBlock value].
numerator isInteger ifTrue:[
- s skipSeparators.
- (s peekOrNil == $/) ifTrue:[
- s next.
- denominator := Integer readFrom:s onError:[^ exceptionBlock value].
- ^ self numerator:numerator denominator:denominator
- ].
- ^ numerator
+ s skipSeparators.
+ (s peekOrNil == $/) ifTrue:[
+ s next.
+ denominator := Integer readFrom:s onError:[^ exceptionBlock value].
+ ^ self numerator:numerator denominator:denominator
+ ].
+ ^ numerator
].
^ numerator asFraction
@@ -246,13 +246,13 @@
The approx. returned here has an error smaller than representable by float instances"
^ self
- numerator:314159265358979323846264343
- denominator:100000000000000000000000000
+ numerator:314159265358979323846264343
+ denominator:100000000000000000000000000
"
^ self
- numerator: 314159265358979323846264338327950288419716939937510582097494459
- denominator:100000000000000000000000000000000000000000000000000000000000000
+ numerator: 314159265358979323846264338327950288419716939937510582097494459
+ denominator:100000000000000000000000000000000000000000000000000000000000000
"
"
@@ -269,16 +269,16 @@
"return an approximation of the constant pi as Fraction (1024 decimal digits)."
PI_1000 isNil ifTrue:[
- PI_1000 := self
- numerator:31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788
- denominator:(10 raisedTo:1024).
+ PI_1000 := self
+ numerator:31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788
+ denominator:(10 raisedTo:1024).
].
^ PI_1000
"
^ self
- numerator: 314159265358979323846264338327950288419716939937510582097494459
- denominator:100000000000000000000000000000000000000000000000000000000000000
+ numerator: 314159265358979323846264338327950288419716939937510582097494459
+ denominator:100000000000000000000000000000000000000000000000000000000000000
"
"
@@ -489,8 +489,8 @@
"/ no need to reduce - I am already
^ self class basicNew
- setNumerator:(numerator negated)
- denominator:denominator
+ setNumerator:(numerator negated)
+ denominator:denominator
"Modified: 5.11.1996 / 10:29:11 / cg"
!
@@ -501,8 +501,8 @@
numerator == 1 ifTrue:[^ denominator].
"/ no need to reduce - I am already
^ self class basicNew
- setNumerator:denominator
- denominator:numerator
+ setNumerator:denominator
+ denominator:numerator
"Modified: 5.11.1996 / 10:29:22 / cg"
! !
@@ -757,11 +757,11 @@
0.5 hash
0.25 hash
0.4 hash
-
- 0.25 hash
- -0.25 hash
- (1/4) hash
- (-1/4) hash
+
+ 0.25 hash
+ -0.25 hash
+ (1/4) hash
+ (-1/4) hash
"
!
@@ -889,7 +889,7 @@
"/ save a multiplication if possible
d == denominator ifTrue:[
- ^ n < numerator
+ ^ n < numerator
].
^ (denominator * n) < (numerator * d)
!
@@ -1148,7 +1148,7 @@
"return true if the receiver is less than zero"
(numerator < 0) ifTrue:[
- ^ (denominator < 0) not
+ ^ (denominator < 0) not
].
^ (denominator < 0)
! !