Denshiro

Untitled

Jun 15th, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.79 KB | None | 0 0
  1. float gauss_random(float avg, float sigma)
  2. {
  3. static bool haveNextGaussian = false;
  4. static float nextGaussian = 0.0f;
  5.  
  6. if (haveNextGaussian)
  7. {
  8. haveNextGaussian = false;
  9. return nextGaussian * sigma + avg;
  10. }
  11. else
  12. {
  13. double v1, v2, s;
  14. do {
  15. //v1 = 2 * nextDouble() - 1; // between -1.0 and 1.0
  16. //v2 = 2 * nextDouble() - 1; // between -1.0 and 1.0
  17. v1 = uniform_random(-1.f, 1.f);
  18. v2 = uniform_random(-1.f, 1.f);
  19. s = v1 * v1 + v2 * v2;
  20. } while (s >= 1.f || fabs(s) < FLT_EPSILON);
  21. double multiplier = sqrtf(-2 * logf(s) / s);
  22. nextGaussian = v2 * multiplier;
  23. haveNextGaussian = true;
  24. return v1 * multiplier * sigma + avg;
  25. }
  26. }
Advertisement
Add Comment
Please, Sign In to add comment