diff options
author | Marc Sunet <msunet@shellblade.net> | 2022-05-11 09:56:33 -0700 |
---|---|---|
committer | Marc Sunet <msunet@shellblade.net> | 2022-05-11 09:56:33 -0700 |
commit | 685950d3f2ac8e893a23443f9e087294cce2c6fa (patch) | |
tree | c348f368d9e6245952321332c80658853348396e /random/src | |
parent | d52ef50957064da5dbfb76839e009c48ff2050c6 (diff) |
Add random variable.
Diffstat (limited to 'random/src')
-rw-r--r-- | random/src/normal.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/random/src/normal.c b/random/src/normal.c new file mode 100644 index 0000000..d4bcac1 --- /dev/null +++ b/random/src/normal.c | |||
@@ -0,0 +1,17 @@ | |||
1 | #include <random/normal.h> | ||
2 | |||
3 | #include <math.h> | ||
4 | |||
5 | // Generate two samples in the standard normal distribution using the | ||
6 | // Box-Muller transform. | ||
7 | // https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform | ||
8 | void normal2(double u, double v, double* z0, double* z1) { | ||
9 | const double r = sqrt(-2 * log(u)); | ||
10 | const double x = 2 * M_PI * v; | ||
11 | *z0 = r * cos(x); | ||
12 | *z1 = r * sin(x); | ||
13 | } | ||
14 | |||
15 | double normal_transform(double z, double mu, double sigma) { | ||
16 | return z*sigma + mu; | ||
17 | } | ||