--- a/SmallInt.st Tue Nov 05 14:32:24 1996 +0100
+++ b/SmallInt.st Tue Nov 05 14:32:56 1996 +0100
@@ -428,7 +428,8 @@
// aNumber
"return the integer part of the quotient of the receivers value
- and the arguments value.
+ and the arguments value. The result is truncated toward negative infinity
+ and negative, if the operands signs differ.
Be careful with negative results: 9 // 4 = 2,
while -9 // 4 = -3.
See #quo: which returns -2 in the latter."
@@ -437,34 +438,34 @@
INT val, rslt;
if (__isSmallInteger(aNumber)) {
- val = __intVal(aNumber);
- if (val != 0) {
- rslt = __intVal(self) / val;
- if (rslt < 0) {
- if (__intVal(self) % val)
- rslt--;
- }
- RETURN ( __MKSMALLINT(rslt) );
- }
+ val = __intVal(aNumber);
+ if (val != 0) {
+ rslt = __intVal(self) / val;
+ if (rslt < 0) {
+ if (__intVal(self) % val)
+ rslt--;
+ }
+ RETURN ( __MKSMALLINT(rslt) );
+ }
} else {
- if (__isFraction(aNumber)) {
- OBJ t;
- INT num, den;
+ if (__isFraction(aNumber)) {
+ OBJ t;
+ INT num, den;
- t = __FractionInstPtr(aNumber)->f_numerator;
- if (__isSmallInteger(t)) {
- num = __intVal(t);
- t = __FractionInstPtr(aNumber)->f_denominator;
- if (__isSmallInteger(t)) {
- den = __intVal(t);
- RETURN ( __MKSMALLINT(__intVal(self) * den / num ));
- }
- }
- }
+ t = __FractionInstPtr(aNumber)->f_numerator;
+ if (__isSmallInteger(t)) {
+ num = __intVal(t);
+ t = __FractionInstPtr(aNumber)->f_denominator;
+ if (__isSmallInteger(t)) {
+ den = __intVal(t);
+ RETURN ( __MKSMALLINT(__intVal(self) * den / num ));
+ }
+ }
+ }
}
%}.
(aNumber = 0) ifTrue:[
- ^ DivisionByZeroSignal raise.
+ ^ DivisionByZeroSignal raise.
].
^ self retry:#// coercing:aNumber
@@ -551,7 +552,8 @@
quo:aNumber
"return the integer part of the quotient of the receivers value
- and the arguments value.
+ and the arguments value. The result is truncated towards zero
+ and negative, if the operands signs differ..
For positive results, this is the same as #//,
for negative results, the remainder is ignored.
I.e.: '9 // 4 = 2' and '-9 // 4 = -3'
@@ -561,29 +563,29 @@
INT val;
if (__isSmallInteger(aNumber)) {
- val = __intVal(aNumber);
- if (val != 0) {
- RETURN ( __MKSMALLINT(__intVal(self) / val) );
- }
+ val = __intVal(aNumber);
+ if (val != 0) {
+ RETURN ( __MKSMALLINT(__intVal(self) / val) );
+ }
} else {
- if (__isFraction(aNumber)) {
- OBJ t;
- INT num, den;
+ if (__isFraction(aNumber)) {
+ OBJ t;
+ INT num, den;
- t = __FractionInstPtr(aNumber)->f_numerator;
- if (__isSmallInteger(t)) {
- num = __intVal(t);
- t = __FractionInstPtr(aNumber)->f_denominator;
- if (__isSmallInteger(t)) {
- den = __intVal(t);
- RETURN ( __MKSMALLINT(__intVal(self) * den / num ));
- }
- }
- }
+ t = __FractionInstPtr(aNumber)->f_numerator;
+ if (__isSmallInteger(t)) {
+ num = __intVal(t);
+ t = __FractionInstPtr(aNumber)->f_denominator;
+ if (__isSmallInteger(t)) {
+ den = __intVal(t);
+ RETURN ( __MKSMALLINT(__intVal(self) * den / num ));
+ }
+ }
+ }
}
%}.
(aNumber = 0) ifTrue:[
- ^ DivisionByZeroSignal raise.
+ ^ DivisionByZeroSignal raise.
].
^ self retry:#quo: coercing:aNumber
@@ -2110,5 +2112,5 @@
!SmallInteger class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Attic/SmallInt.st,v 1.59 1996-10-29 21:29:24 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Attic/SmallInt.st,v 1.60 1996-11-05 13:32:56 cg Exp $'
! !
--- a/SmallInteger.st Tue Nov 05 14:32:24 1996 +0100
+++ b/SmallInteger.st Tue Nov 05 14:32:56 1996 +0100
@@ -428,7 +428,8 @@
// aNumber
"return the integer part of the quotient of the receivers value
- and the arguments value.
+ and the arguments value. The result is truncated toward negative infinity
+ and negative, if the operands signs differ.
Be careful with negative results: 9 // 4 = 2,
while -9 // 4 = -3.
See #quo: which returns -2 in the latter."
@@ -437,34 +438,34 @@
INT val, rslt;
if (__isSmallInteger(aNumber)) {
- val = __intVal(aNumber);
- if (val != 0) {
- rslt = __intVal(self) / val;
- if (rslt < 0) {
- if (__intVal(self) % val)
- rslt--;
- }
- RETURN ( __MKSMALLINT(rslt) );
- }
+ val = __intVal(aNumber);
+ if (val != 0) {
+ rslt = __intVal(self) / val;
+ if (rslt < 0) {
+ if (__intVal(self) % val)
+ rslt--;
+ }
+ RETURN ( __MKSMALLINT(rslt) );
+ }
} else {
- if (__isFraction(aNumber)) {
- OBJ t;
- INT num, den;
+ if (__isFraction(aNumber)) {
+ OBJ t;
+ INT num, den;
- t = __FractionInstPtr(aNumber)->f_numerator;
- if (__isSmallInteger(t)) {
- num = __intVal(t);
- t = __FractionInstPtr(aNumber)->f_denominator;
- if (__isSmallInteger(t)) {
- den = __intVal(t);
- RETURN ( __MKSMALLINT(__intVal(self) * den / num ));
- }
- }
- }
+ t = __FractionInstPtr(aNumber)->f_numerator;
+ if (__isSmallInteger(t)) {
+ num = __intVal(t);
+ t = __FractionInstPtr(aNumber)->f_denominator;
+ if (__isSmallInteger(t)) {
+ den = __intVal(t);
+ RETURN ( __MKSMALLINT(__intVal(self) * den / num ));
+ }
+ }
+ }
}
%}.
(aNumber = 0) ifTrue:[
- ^ DivisionByZeroSignal raise.
+ ^ DivisionByZeroSignal raise.
].
^ self retry:#// coercing:aNumber
@@ -551,7 +552,8 @@
quo:aNumber
"return the integer part of the quotient of the receivers value
- and the arguments value.
+ and the arguments value. The result is truncated towards zero
+ and negative, if the operands signs differ..
For positive results, this is the same as #//,
for negative results, the remainder is ignored.
I.e.: '9 // 4 = 2' and '-9 // 4 = -3'
@@ -561,29 +563,29 @@
INT val;
if (__isSmallInteger(aNumber)) {
- val = __intVal(aNumber);
- if (val != 0) {
- RETURN ( __MKSMALLINT(__intVal(self) / val) );
- }
+ val = __intVal(aNumber);
+ if (val != 0) {
+ RETURN ( __MKSMALLINT(__intVal(self) / val) );
+ }
} else {
- if (__isFraction(aNumber)) {
- OBJ t;
- INT num, den;
+ if (__isFraction(aNumber)) {
+ OBJ t;
+ INT num, den;
- t = __FractionInstPtr(aNumber)->f_numerator;
- if (__isSmallInteger(t)) {
- num = __intVal(t);
- t = __FractionInstPtr(aNumber)->f_denominator;
- if (__isSmallInteger(t)) {
- den = __intVal(t);
- RETURN ( __MKSMALLINT(__intVal(self) * den / num ));
- }
- }
- }
+ t = __FractionInstPtr(aNumber)->f_numerator;
+ if (__isSmallInteger(t)) {
+ num = __intVal(t);
+ t = __FractionInstPtr(aNumber)->f_denominator;
+ if (__isSmallInteger(t)) {
+ den = __intVal(t);
+ RETURN ( __MKSMALLINT(__intVal(self) * den / num ));
+ }
+ }
+ }
}
%}.
(aNumber = 0) ifTrue:[
- ^ DivisionByZeroSignal raise.
+ ^ DivisionByZeroSignal raise.
].
^ self retry:#quo: coercing:aNumber
@@ -2110,5 +2112,5 @@
!SmallInteger class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/SmallInteger.st,v 1.59 1996-10-29 21:29:24 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/SmallInteger.st,v 1.60 1996-11-05 13:32:56 cg Exp $'
! !