# HG changeset patch # User Claus Gittinger # Date 818372174 -3600 # Node ID 7f9b4315058ccbc14df7b24c146c27d99cf2fc56 # Parent 2804943fc6f018fdbeb88b8e0b2675ab9e49a35a checkin from browser diff -r 2804943fc6f0 -r 7f9b4315058c Random.st --- 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 $' +! !