NEURON
Normal.cpp
Go to the documentation of this file.
1
#include <../../nrnconf.h>
2
/*
3
Copyright (C) 1988 Free Software Foundation
4
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
5
6
This file is part of the GNU C++ Library. This library is free
7
software; you can redistribute it and/or modify it under the terms of
8
the GNU Library General Public License as published by the Free
9
Software Foundation; either version 2 of the License, or (at your
10
option) any later version. This library is distributed in the hope
11
that it will be useful, but WITHOUT ANY WARRANTY; without even the
12
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
13
PURPOSE. See the GNU Library General Public License for more details.
14
You should have received a copy of the GNU Library General Public
15
License along with this library; if not, write to the Free Software
16
Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
17
*/
18
#ifdef __GNUG__
19
#pragma implementation
20
#endif
21
#include <
Random.h
>
22
#include <
Normal.h
>
23
//
24
// See Simulation, Modelling & Analysis by Law & Kelton, pp259
25
//
26
// This is the ``polar'' method.
27
//
28
29
double
Normal::operator()
()
30
{
31
32
if
(
haveCachedNormal
== 1) {
33
haveCachedNormal
= 0;
34
return
(
cachedNormal
*
pStdDev
+
pMean
);
35
}
else
{
36
37
for
(;;) {
38
double
u1 =
pGenerator
-> asDouble();
39
double
u2 =
pGenerator
-> asDouble();
40
double
v1 = 2 * u1 - 1;
41
double
v2 = 2 * u2 - 1;
42
double
w = (v1 * v1) + (v2 * v2);
43
44
//
45
// We actually generate two IID normal distribution variables.
46
// We cache the one & return the other.
47
//
48
if
(w <= 1) {
49
double
y =
sqrt
( (-2 *
log
(w)) / w);
50
double
x1 = v1 * y;
51
double
x2 = v2 * y;
52
53
haveCachedNormal
= 1;
54
cachedNormal
= x2;
55
return
(x1 *
pStdDev
+
pMean
);
56
}
57
}
58
}
59
}
60
Normal.h
log
log
Definition:
extdef.h:3
Normal::cachedNormal
double cachedNormal
Definition:
Normal.h:28
Normal::operator()
virtual double operator()()
Definition:
Normal.cpp:29
Normal::pStdDev
double pStdDev
Definition:
Normal.h:33
Random::pGenerator
RNG * pGenerator
Definition:
Random.h:34
sqrt
sqrt
Definition:
extdef.h:3
Random.h
Normal::pMean
double pMean
Definition:
Normal.h:31
Normal::haveCachedNormal
char haveCachedNormal
Definition:
Normal.h:27
src
gnu
Normal.cpp