Returns a random number drawn from a normal distribution * with mean of 0 and variance of 1 * Marsaglia algorithm */
| 1527 | * Marsaglia algorithm |
| 1528 | */ |
| 1529 | static double |
| 1530 | randn(int n) |
| 1531 | { |
| 1532 | double S, Z, U1, U2, u, v, fac; |
| 1533 | |
| 1534 | do { |
| 1535 | U1 = (double)rand() / RAND_MAX; |
| 1536 | U2 = (double)rand() / RAND_MAX; |
| 1537 | u = 2. * U1 - 1.; |
| 1538 | v = 2. * U2 - 1.; |
| 1539 | S = u * u + v * v; |
| 1540 | } while (S >= 1 || S == 0); |
| 1541 | fac = sqrt(-2. * log(S) / S); |
| 1542 | Z = (n % 2) ? u * fac : v * fac; |
| 1543 | return Z; |
| 1544 | } |
| 1545 | |
| 1546 | static inline double |
| 1547 | maxstar(double A, double B) |
no test coverage detected