8
8
#classVars : [
9
9
' NextRandom'
10
10
],
11
- #category : ' Math-Core-Distribution'
11
+ #category : # ' Math-Core-Distribution'
12
12
}
13
13
14
+ { #category : #information }
15
+ PMNormalDistribution class >> boxMullerTransform [
16
+ |v1 v2 w y |
17
+ [ v1 := Number random * 2 - 1 .
18
+ v2 := Number random * 2 - 1 .
19
+ w := v1 squared + v2 squared.
20
+ w > 1 ] whileTrue.
21
+ y := (w ln * 2 negated / w) sqrt.
22
+ v1 := y * v1.
23
+ NextRandom := y * v2.
24
+ ^ v1.
25
+ ]
26
+
14
27
{ #category : #information }
15
28
PMNormalDistribution class >> distributionName [
16
29
@@ -41,20 +54,15 @@ PMNormalDistribution class >> new: aNumber1 sigma: aNumber2 [
41
54
{ #category : #information }
42
55
PMNormalDistribution class >> random [
43
56
" Answer a random number distributed according to a (0,1) normal distribution."
44
- | v1 v2 w y |
45
- NextRandom isNil
46
- ifTrue: [ [ v1 := Number random * 2 - 1 .
47
- v2 := Number random * 2 - 1 .
48
- w := v1 squared + v2 squared.
49
- w > 1 ] whileTrue: [].
50
- y := ( ( w ln * 2 negated) / w) sqrt.
51
- v1 := y * v1.
52
- NextRandom := y * v2.
53
- ]
54
- ifFalse: [ v1 := NextRandom .
55
- NextRandom := nil .
56
- ].
57
- ^ v1
57
+
58
+ | v1 |
59
+ NextRandom
60
+ ifNil: [
61
+
62
+ v1 := self boxMullerTransform ]
63
+ ifNotNil: [ v1 := NextRandom .
64
+ NextRandom := nil ].
65
+ ^ v1
58
66
]
59
67
60
68
{ #category : #information }
@@ -78,10 +86,8 @@ PMNormalDistribution >> distributionValue: aNumber [
78
86
79
87
{ #category : #initialization }
80
88
PMNormalDistribution >> initialize: aNumber1 sigma: aNumber2 [
81
-
82
89
mu := aNumber1.
83
- sigma := aNumber2.
84
- ^ self
90
+ sigma := aNumber2
85
91
]
86
92
87
93
{ #category : #information }
@@ -98,8 +104,9 @@ PMNormalDistribution >> parameters [
98
104
99
105
{ #category : #information }
100
106
PMNormalDistribution >> random [
101
- " Answer a random number distributed accroding to the receiver."
102
- ^ self class random * sigma + mu
107
+ " Answer a random number distributed according to the receiver."
108
+
109
+ ^ self class random * sigma + mu
103
110
]
104
111
105
112
{ #category : #information }
0 commit comments