normal distribution via Box-Muller
| 147 | |
| 148 | // normal distribution via Box-Muller |
| 149 | float RandomSource::nrandf(float stddev, float mean) { |
| 150 | float rand1, rand2, distSqr; |
| 151 | do { |
| 152 | rand1 = 2 * randf() - 1; |
| 153 | rand2 = 2 * randf() - 1; |
| 154 | distSqr = rand1 * rand1 + rand2 * rand2; |
| 155 | } while (distSqr >= 1); |
| 156 | |
| 157 | float mapping = std::sqrt(-2 * std::log(distSqr) / distSqr); |
| 158 | return (rand1 * mapping * stddev + mean); |
| 159 | } |
| 160 | |
| 161 | double RandomSource::nrandd(double stddev, double mean) { |
| 162 | double rand1, rand2, distSqr; |