The Inbox: Kernel-ul.867.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Inbox: Kernel-ul.867.mcz

commits-2
A new version of Kernel was added to project The Inbox:
http://source.squeak.org/inbox/Kernel-ul.867.mcz

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

Name: Kernel-ul.867
Author: ul
Time: 8 August 2014, 2:38:42.181 pm
UUID: 063b12b2-4b02-4c50-a8a9-65e1e733adff
Ancestors: Kernel-eem.866

- support code for Fraction literals
- optimized versions of #isZero.

=============== Diff against Kernel-eem.866 ===============

Item was added:
+ ----- Method: Fraction>>isLiteral (in category 'printing') -----
+ isLiteral
+
+ | remainder powerOfFive expPowersOfFive qr index |
+ (remainder := denominator bitShift: 1 - denominator lowBit) = 1 ifTrue: [ ^true ].
+ powerOfFive := 5.
+ expPowersOfFive := OrderedCollection new.
+ [
+ qr := remainder digitDiv: powerOfFive neg: false.
+ (qr at: 2) normalize = 0 ] whileTrue: [
+ remainder := (qr at: 1) normalize.
+ expPowersOfFive add: powerOfFive.
+ powerOfFive := powerOfFive * powerOfFive ].
+ (index := expPowersOfFive size) = 0 ifTrue: [ ^false ].
+ [ index >= 1 and: [ remainder ~= 1 " >1 " ] ] whileTrue: [
+ powerOfFive := expPowersOfFive at: index.
+ qr := remainder digitDiv: powerOfFive neg: false.
+ (qr at: 2) normalize = 0 ifTrue: [
+ remainder := (qr at: 1) normalize ].
+ index := index - 1 ].
+ ^remainder = 1!

Item was added:
+ ----- Method: Fraction>>printAsDecimalFractionIfPossibleOn: (in category 'printing') -----
+ printAsDecimalFractionIfPossibleOn: aStream
+
+ | twos fives remainder exponent mantissa |
+ twos := denominator lowBit - 1.
+ fives := 0.
+ (remainder := denominator bitShift: twos negated) ~= 1 "  >1 "  ifTrue: [
+ | powerOfFive expPowersOfFive qr index |
+ powerOfFive := 5.
+ expPowersOfFive := OrderedCollection new.
+ [
+ qr := remainder digitDiv: powerOfFive neg: false.
+ (qr at: 2) normalize = 0 ] whileTrue: [
+ remainder := (qr at: 1) normalize.
+ expPowersOfFive add: powerOfFive.
+ powerOfFive := powerOfFive * powerOfFive.
+ fives := fives + (1 bitShift: expPowersOfFive size - 1) ].
+ (index := expPowersOfFive size) = 0 ifTrue: [ ^false ].
+ [ index >= 1 and: [ remainder ~= 1 " >1 " ] ] whileTrue: [
+ powerOfFive := expPowersOfFive at: index.
+ qr := remainder digitDiv: powerOfFive neg: false.
+ (qr at: 2) normalize = 0 ifTrue: [
+ remainder := (qr at: 1) normalize.
+ fives := fives + (1 bitShift: index - 1) ].
+ index := index - 1 ] ].
+ remainder = 1 ifFalse: [ ^false ].
+ " denominator has the form of 2^twos * 5^fives "
+ twos = fives
+ ifTrue: [
+ mantissa := numerator.
+ exponent := twos ]
+ ifFalse: [
+ twos < fives
+ ifTrue: [
+ mantissa := numerator bitShift: fives - twos.
+ exponent := fives ]
+ ifFalse: [
+ mantissa := numerator * (5 raisedToInteger: twos - fives).
+ exponent := twos ] ].
+ mantissa printOn: aStream base: 10.
+ aStream nextPutAll: 'e-'.
+ exponent printOn: aStream base: 10.
+ ^true!

Item was removed:
- ----- Method: Fraction>>printOn: (in category 'printing') -----
- printOn: aStream
-
- aStream nextPut: $(.
- numerator printOn: aStream.
- aStream nextPut: $/.
- denominator printOn: aStream.
- aStream nextPut: $).
- !

Item was changed:
  ----- Method: Fraction>>printOn:base: (in category 'printing') -----
  printOn: aStream base: base
 
+ (base = 10 and: [ self printAsDecimalFractionIfPossibleOn: aStream ]) ifTrue: [ ^self ].
  aStream nextPut: $(.
  numerator printOn: aStream base: base.
  aStream nextPut: $/.
  denominator printOn: aStream base: base.
  aStream nextPut: $).
  !

Item was added:
+ ----- Method: LargeNegativeInteger>>isZero (in category 'testing') -----
+ isZero
+ "Optimization. Answer false since receiver is less than 0."
+
+ ^false
+ !

Item was added:
+ ----- Method: LargePositiveInteger>>isZero (in category 'testing') -----
+ isZero
+ "Optimization. Answer false since receiver is greater than 0."
+
+ ^false
+ !