| 159 | } |
| 160 | |
| 161 | double RandomSource::nrandd(double stddev, double mean) { |
| 162 | double rand1, rand2, distSqr; |
| 163 | do { |
| 164 | rand1 = 2 * randd() - 1; |
| 165 | rand2 = 2 * randd() - 1; |
| 166 | distSqr = rand1 * rand1 + rand2 * rand2; |
| 167 | } while (distSqr >= 1); |
| 168 | |
| 169 | double mapping = std::sqrt(-2 * std::log(distSqr) / distSqr); |
| 170 | return (rand1 * mapping * stddev + mean); |
| 171 | } |
| 172 | |
| 173 | int64_t RandomSource::stochasticRound(double val) { |
| 174 | double fpart = val - floor(val); |