Skip to content

Commit 482c790

Browse files
Merge pull request #190 from SergeStinckwich/master
Some basic cleaning on various Distributions classes
2 parents a792951 + ea87d33 commit 482c790

File tree

5 files changed

+47
-39
lines changed

5 files changed

+47
-39
lines changed

src/Math-Core-Distribution/PMNormalDistribution.class.st

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,22 @@ Class {
88
#classVars : [
99
'NextRandom'
1010
],
11-
#category : 'Math-Core-Distribution'
11+
#category : #'Math-Core-Distribution'
1212
}
1313

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+
1427
{ #category : #information }
1528
PMNormalDistribution class >> distributionName [
1629

@@ -41,20 +54,15 @@ PMNormalDistribution class >> new: aNumber1 sigma: aNumber2 [
4154
{ #category : #information }
4255
PMNormalDistribution class >> random [
4356
"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
5866
]
5967

6068
{ #category : #information }
@@ -78,10 +86,8 @@ PMNormalDistribution >> distributionValue: aNumber [
7886

7987
{ #category : #initialization }
8088
PMNormalDistribution >> initialize: aNumber1 sigma: aNumber2 [
81-
8289
mu := aNumber1.
83-
sigma := aNumber2.
84-
^self
90+
sigma := aNumber2
8591
]
8692

8793
{ #category : #information }
@@ -98,8 +104,9 @@ PMNormalDistribution >> parameters [
98104

99105
{ #category : #information }
100106
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
103110
]
104111

105112
{ #category : #information }

src/Math-Numerical/Number.extension.st

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,16 @@ Number >> productWithVector: aVector [
7070
]
7171

7272
{ #category : #'*Math-Numerical' }
73-
Number >> random [
74-
"Answers a random number distributed between 0 and the receiver."
75-
^self class random * self
73+
Number class >> random [
74+
"Answers a floating random number between 0 and 1 excluded"
75+
76+
^ PMMitchellMooreGenerator new floatValue
7677
]
7778

7879
{ #category : #'*Math-Numerical' }
79-
Number class >> random [
80-
"Answers a random number between 0 and the receiver."
81-
^ PMMitchellMooreGenerator new floatValue
80+
Number >> random [
81+
"Answers a random number distributed between 0 and the receiver."
82+
^self class random * self
8283
]
8384

8485
{ #category : #'*Math-Numerical' }

src/Math-Numerical/PMCauchyDistribution.class.st

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,10 @@ PMCauchyDistribution >> distributionValue: aNumber [
5959

6060
{ #category : #initialization }
6161
PMCauchyDistribution >> initialize: aNumber1 scale: aNumber2 [
62-
"Private - Initialize the parameters of the receiver. "
62+
"Initialize the parameters of the receiver. "
63+
6364
mu := aNumber1.
64-
beta := aNumber2.
65-
^self
65+
beta := aNumber2
6666
]
6767

6868
{ #category : #information }

src/Math-Numerical/PMExponentialDistribution.class.st

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ PMExponentialDistribution >> initialize: aNumber [
6666

6767
aNumber > 0
6868
ifFalse: [ self error: 'Illegal distribution parameters' ].
69-
beta := aNumber.
70-
^ self
69+
beta := aNumber
7170
]
7271

7372
{ #category : #information }

src/Math-Numerical/PMFisherTippettDistribution.class.st

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,12 @@ PMFisherTippettDistribution >> distributionValue: aNumber [
6868

6969
{ #category : #initialization }
7070
PMFisherTippettDistribution >> initialize: aNumber1 scale: aNumber2 [
71-
"Private - Initialize the parameters of the receiver."
72-
aNumber2 > 0
73-
ifFalse: [ self error: 'Illegal distribution parameters'].
71+
"Initialize the parameters of the receiver."
72+
73+
aNumber2 <= 0
74+
ifTrue: [ self error: 'Illegal distribution parameters' ].
7475
alpha := aNumber1.
75-
beta := aNumber2.
76-
^self
76+
beta := aNumber2
7777
]
7878

7979
{ #category : #information }
@@ -104,11 +104,12 @@ PMFisherTippettDistribution >> parameters [
104104

105105
{ #category : #information }
106106
PMFisherTippettDistribution >> random [
107-
"Answer a random number distributed according to the receiver."
107+
"Answer a random number distributed according to the receiver."
108+
108109
| t |
109110
[ t := flatGenerator floatValue ln negated.
110-
t > 0] whileFalse: [].
111-
^t ln negated * beta + alpha
111+
t > 0 ] whileFalse.
112+
^ t ln negated * beta + alpha
112113
]
113114

114115
{ #category : #information }

0 commit comments

Comments
 (0)