--- a/Random.st Thu Dec 07 22:30:55 1995 +0100
+++ b/Random.st Thu Dec 07 22:36:14 1995 +0100
@@ -24,8 +24,6 @@
see notice in (Random>>documentation)
"
-'From Smalltalk/X, Version:2.10.4 on 25-feb-1995 at 9:35:41 am'!
-
Stream subclass:#Random
instanceVariableNames:'seed'
classVariableNames:''
@@ -63,10 +61,6 @@
"
!
-version
- ^ '$Header: /cvs/stx/stx/libbasic2/Random.st,v 1.12 1995-11-11 15:21:33 cg Exp $'
-!
-
documentation
"
random numbers - thanks to Steves GNU Smalltalk
@@ -93,58 +87,20 @@
^self basicNew setSeed
! !
-!Random methodsFor:'testing'!
-
-chiSquare
- "perform a chiSquare-test on the receiver"
-
- "returns on Sun3 93.40000000000009"
- ^self chiSquare: 1000 range: 100
-
- "Random new chiSquare"
-!
-
-chiSquare: n range: r
- | f t s |
- s := 1234567.
- f := Array new: r + 1.
- 1 to: r + 1 do: [ :i | f at: i put: 0 ].
- n timesRepeat:
- [ s := (seed * 31415821) + 1 bitAnd: 16r3FFFFFFF.
- t := s \\ r.
- f at: t + 1 put: (f at: t + 1) + 1 ].
- t := 0.
- 1 to: r do: [ :i | t := t + (f at: i) squared ].
- ^r asFloat * t / n - n
-!
-
-isReadable
- ^ true
-!
-
-atEnd
- "instances of Random can always give more numbers"
-
- ^ false
-! !
-
!Random methodsFor:'accessing-reading'!
-nextInteger
- "return the next integral random number,
- in the range 0 .. 16r3FFFFFFF.
- From Sedgewick's 'Algorithms', based on Lehmer's method"
+next
+ "return the next random number in the range 0..1"
- "the times: is a kludge - times does not convert to LargeInteger on overflow"
seed := (seed times:31415821) + 1 bitAnd: 16r3FFFFFFF.
- ^ seed
+ ^ self nextInteger / 16r3FFFFFFF asFloat
"|r|
r := Random new.
- Transcript showCr:r nextInteger.
- Transcript showCr:r nextInteger.
- Transcript showCr:r nextInteger.
- Transcript showCr:r nextInteger.
+ Transcript showCr:r next.
+ Transcript showCr:r next.
+ Transcript showCr:r next.
+ Transcript showCr:r next.
"
!
@@ -169,21 +125,6 @@
"
!
-next
- "return the next random number in the range 0..1"
-
- seed := (seed times:31415821) + 1 bitAnd: 16r3FFFFFFF.
- ^ self nextInteger / 16r3FFFFFFF asFloat
-
- "|r|
- r := Random new.
- Transcript showCr:r next.
- Transcript showCr:r next.
- Transcript showCr:r next.
- Transcript showCr:r next.
- "
-!
-
nextBoolean
"return true or false by random"
@@ -200,6 +141,24 @@
"
!
+nextInteger
+ "return the next integral random number,
+ in the range 0 .. 16r3FFFFFFF.
+ From Sedgewick's 'Algorithms', based on Lehmer's method"
+
+ "the times: is a kludge - times does not convert to LargeInteger on overflow"
+ seed := (seed times:31415821) + 1 bitAnd: 16r3FFFFFFF.
+ ^ seed
+
+ "|r|
+ r := Random new.
+ Transcript showCr:r nextInteger.
+ Transcript showCr:r nextInteger.
+ Transcript showCr:r nextInteger.
+ Transcript showCr:r nextInteger.
+ "
+!
+
nextIntegerBetween:start and:stop
"return an integral random between start and stop"
@@ -247,3 +206,43 @@
seed := Time secondClock bitAnd: 16r3FFFFFFF
! !
+!Random methodsFor:'testing'!
+
+atEnd
+ "instances of Random can always give more numbers"
+
+ ^ false
+!
+
+chiSquare
+ "perform a chiSquare-test on the receiver"
+
+ "returns on Sun3 93.40000000000009"
+ ^self chiSquare: 1000 range: 100
+
+ "Random new chiSquare"
+!
+
+chiSquare: n range: r
+ | f t s |
+ s := 1234567.
+ f := Array new: r + 1.
+ 1 to: r + 1 do: [ :i | f at: i put: 0 ].
+ n timesRepeat:
+ [ s := (seed * 31415821) + 1 bitAnd: 16r3FFFFFFF.
+ t := s \\ r.
+ f at: t + 1 put: (f at: t + 1) + 1 ].
+ t := 0.
+ 1 to: r do: [ :i | t := t + (f at: i) squared ].
+ ^r asFloat * t / n - n
+!
+
+isReadable
+ ^ true
+! !
+
+!Random class methodsFor:'documentation'!
+
+version
+ ^ '$Header: /cvs/stx/stx/libbasic2/Random.st,v 1.13 1995-12-07 21:36:14 cg Exp $'
+! !