--- a/GeometricSeries.st Mon Aug 12 10:48:19 2019 +0200
+++ b/GeometricSeries.st Mon Aug 12 11:30:00 2019 +0200
@@ -91,16 +91,56 @@
(1 to:128 byFactor:2) at:1.
(1 to:128 byFactor:2) at:2.
(1 to:128 byFactor:2) at:3.
- (1 to:128 byFactor:2) last.
+ (1 to:128 byFactor:2) last.
+ (1 to:100 byFactor:2) last.
(16 to:1 byFactor:(1/2)) do:[:v | Transcript showCR:v]
(16 to:1 byFactor:(1/2)) at:1.
(16 to:1 byFactor:(1/2)) at:2.
(16 to:1 byFactor:(1/2)) at:3.
(16 to:1 byFactor:(1/2)) last.
+ (16 to:3 byFactor:(1/2)) last.
"
"Created: / 22-07-2019 / 14:49:12 / Claus Gittinger"
+!
+
+first
+ ^ start
+
+ "
+ (1 to:100 byFactor:2) first
+ (10 to:100 byFactor:3) first
+ (100 to:10 byFactor:1/3) first
+ "
+
+ "Created: / 31.10.2001 / 15:06:31 / cg"
+!
+
+last
+ |n last|
+
+ n := (stop/start) log:factor.
+ n := n truncated asInteger.
+ ^ start * (factor raisedToInteger:n).
+
+ "
+ (1 to:100 byFactor:2) last
+ (1 to:100 byFactor:3) last
+ (10 to:100 byFactor:3) last
+ (100 to:10 byFactor:1/3) last
+ (100 to:1 byFactor:1/2) last
+
+ (1 to:100 byFactor:2.0) last
+ (1 to:64.0 byFactor:2.0) last
+ (1 to:100 byFactor:3.0) last
+ (10 to:100.0 byFactor:3) last
+ (100 to:10.0 byFactor:0.3) last
+ (100 to:3 byFactor:1/2) last
+ (100 to:3 byFactor:0.5) last
+ "
+
+ "Created: / 31.10.2001 / 15:06:31 / cg"
! !
!GeometricSeries methodsFor:'enumerating'!
@@ -126,19 +166,19 @@
]
]
] ifTrue:[
- "/ the code below avoids rounding errors
+ "/ the code below tries to avoid rounding errors
"/ to accumulate if floats are enumerated.
iter := 1.
factor < 1 ifTrue:[
[stop <= aValue] whileTrue:[
aBlock value:aValue.
- aValue := start + (factor raisedTo:iter).
+ aValue := start * (factor raisedTo:iter).
iter := iter + 1.
]
] ifFalse:[
[stop >= aValue] whileTrue:[
aBlock value:aValue.
- aValue := start + (factor raisedTo:iter).
+ aValue := start * (factor raisedTo:iter).
iter := iter + 1.
]
]
@@ -151,16 +191,6 @@
(GeometricSeries from:1 to:128 byFactor:2) do:[:v | Transcript showCR:v]
"
-!
-
-size
- |cnt|
-
- cnt := 0.
- self do:[:each | cnt := cnt + 1].
- ^ cnt
-
- "Created: / 31.10.2001 / 15:06:31 / cg"
! !
!GeometricSeries methodsFor:'printing & storing'!
@@ -205,6 +235,39 @@
! !
+!GeometricSeries methodsFor:'queries'!
+
+size
+ |n last|
+
+ n := (stop/start) log:factor.
+ n := n truncated asInteger.
+ last := start * (factor raisedToInteger:n).
+ ^ n + 1
+
+"/ cnt := 0.
+"/ self do:[:each | cnt := cnt + 1].
+"/ ^ cnt
+
+ "
+ (1 to:100 byFactor:2) size
+ (1 to:100 byFactor:3) size
+ (10 to:100 byFactor:3) size
+ (100 to:10 byFactor:1/3) size
+ (100 to:1 byFactor:1/2) size
+
+ (1 to:100 byFactor:2.0) size
+ (1 to:64.0 byFactor:2.0) size
+ (1 to:100 byFactor:3.0) size
+ (10 to:100.0 byFactor:3) size
+ (100 to:10.0 byFactor:0.3) size
+ (100 to:3 byFactor:1/2) size
+ (100 to:3 byFactor:0.5) size
+ "
+
+ "Created: / 31.10.2001 / 15:06:31 / cg"
+! !
+
!GeometricSeries class methodsFor:'documentation'!
version