diff -r be1e6900fbdf -r aa82caad8dbc GeometricSeries.st --- 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