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 | } | ||
