Generating a random Gaussian double in Objective-C/C

蓝咒 提交于 2019-12-18 03:39:35

问题


I'm trying to generate a random Gaussian double in Objective-C (the same as random.nextGaussian in Java). However rand_gauss() doesn't seem to work. Anyone know a way of achieving this?


回答1:


This link shows how to calculate it using the standard random() function.

I should note that you'll likely have to make the ranf() routine that converts the output of random() from [0,MAX_INT] to be from [0,1], but that shouldn't be too difficult.

From the linked article:

The polar form of the Box-Muller transformation is both faster and more robust numerically. The algorithmic description of it is: float x1, x2, w, y1, y2;

     do {
             x1 = 2.0 * ranf() - 1.0;
             x2 = 2.0 * ranf() - 1.0;
             w = x1 * x1 + x2 * x2;
     } while ( w >= 1.0 );

     w = sqrt( (-2.0 * ln( w ) ) / w );
     y1 = x1 * w;
     y2 = x2 * w;


来源:https://stackoverflow.com/questions/8779843/generating-a-random-gaussian-double-in-objective-c-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!