From http://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform
| 640 | |
| 641 | // From http://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform |
| 642 | float rand_normal() |
| 643 | { |
| 644 | static int haveSpare = 0; |
| 645 | static double rand1, rand2; |
| 646 | |
| 647 | if(haveSpare) |
| 648 | { |
| 649 | haveSpare = 0; |
| 650 | return sqrt(rand1) * sin(rand2); |
| 651 | } |
| 652 | |
| 653 | haveSpare = 1; |
| 654 | |
| 655 | rand1 = rand() / ((double) RAND_MAX); |
| 656 | if(rand1 < 1e-100) rand1 = 1e-100; |
| 657 | rand1 = -2 * log(rand1); |
| 658 | rand2 = (rand() / ((double) RAND_MAX)) * TWO_PI; |
| 659 | |
| 660 | return sqrt(rand1) * cos(rand2); |
| 661 | } |
| 662 | |
| 663 | /* |
| 664 | float rand_normal() |
no outgoing calls