[squeak-dev] The Trunk: Kernel-nice.748.mcz

commits at source.squeak.org commits at source.squeak.org
Mon Mar 11 07:20:12 UTC 2013


Nicolas Cellier uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-nice.748.mcz

==================== Summary ====================

Name: Kernel-nice.748
Author: nice
Time: 11 March 2013, 8:18:42.912 am
UUID: e289a03d-ac61-40dd-9b28-4d950ddb1b76
Ancestors: Kernel-nice.747

Speed-up Integer+/-Fraction and Fraction+/-Integer because we know this does not require any gcd computation.
This speed up cause minimal code duplication.

=============== Diff against Kernel-nice.747 ===============

Item was changed:
  ----- Method: Fraction>>+ (in category 'arithmetic') -----
  + aNumber 
  	"Answer the sum of the receiver and aNumber."
  	| n d d1 d2 |
+ 	aNumber isInteger ifTrue:
+ 		[^Fraction numerator: numerator + (denominator * aNumber) denominator: denominator].
  	aNumber isFraction ifTrue: 
  		[d := denominator gcd: aNumber denominator.
  		n := numerator * (d1 := aNumber denominator // d) + (aNumber numerator * (d2 := denominator // d)).
  		d1 := d1 * d2.
  		n := n // (d2 := n gcd: d).
  		(d := d1 * (d // d2)) = 1 ifTrue: [^ n].
  		^ Fraction numerator: n denominator: d].
  	^ aNumber adaptToFraction: self andSend: #+!

Item was changed:
  ----- Method: Fraction>>- (in category 'arithmetic') -----
  - aNumber
  	"Answer the difference between the receiver and aNumber."
+ 	aNumber isInteger ifTrue:
+ 		[^Fraction numerator: numerator - (denominator * aNumber) denominator: denominator].
  	aNumber isFraction ifTrue:
  		[^ self + aNumber negated].
  	^ aNumber adaptToFraction: self andSend: #-!

Item was changed:
  ----- Method: Integer>>+ (in category 'arithmetic') -----
  + aNumber
  	"Refer to the comment in Number + "
  	aNumber isInteger ifTrue:
  		[self negative == aNumber negative
  			ifTrue: [^ (self digitAdd: aNumber) normalize]
  			ifFalse: [^ self digitSubtract: aNumber]].
+ 	aNumber isFraction ifTrue:
+ 		[^Fraction numerator: self * aNumber denominator + aNumber numerator denominator: aNumber denominator].
  	^ aNumber adaptToInteger: self andSend: #+!

Item was changed:
  ----- Method: Integer>>- (in category 'arithmetic') -----
  - aNumber
  	"Refer to the comment in Number - "
  	aNumber isInteger ifTrue:
  		[self negative == aNumber negative
  			ifTrue: [^ self digitSubtract: aNumber]
  			ifFalse: [^ (self digitAdd: aNumber) normalize]].
+ 	aNumber isFraction ifTrue:
+ 		[^Fraction numerator: self * aNumber denominator - aNumber numerator denominator: aNumber denominator].
  	^ aNumber adaptToInteger: self andSend: #-!



More information about the Squeak-dev mailing list