寄托天下 寄托天下
查看: 2975|回复: 3
打印 上一主题 下一主题

[编程天地] 如何产生高斯随机数 [复制链接]

Rank: 4

声望
24
寄托币
758
注册时间
2007-6-15
精华
1
帖子
24
跳转到指定楼层
楼主
发表于 2011-4-9 04:48:00 |只看该作者 |倒序浏览
本帖最后由 caoyi132 于 2011-4-9 22:24 编辑

/* boxmuller.c           Implements the Polar form of the Box-Muller
                         Transformation

                      (c) Copyright 1994, Everett F. Carter Jr.
                          Permission is granted by the author to use
                          this software for any application provided this
                          copyright notice is preserved.

*/

#include <math.h>


extern float ranf();         /* ranf() is uniform in 0..1 */


float box_muller(float m, float s)        /* normal random variate generator */
{                                        /* mean m, standard deviation s */
        float x1, x2, w, y1;
        static float y2;
        static int use_last = 0;

        if (use_last)                        /* use value from previous call */
        {
                y1 = y2;
                use_last = 0;
        }
        else
        {
                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 * log( w ) ) / w );
                y1 = x1 * w;
                y2 = x2 * w;
                use_last = 1;
        }

        return( m + y1 * s );
}

搞不清楚这个函数中 static int use_last=0;干什么用呀? 这样的话不是每次调用是都只执行 if 嘛?
回应
0

使用道具 举报

Rank: 11Rank: 11Rank: 11Rank: 11

声望
3110
寄托币
48275
注册时间
2003-9-1
精华
44
帖子
1795

荣誉版主 GRE斩浪之魂 Golden Apple

沙发
发表于 2011-4-10 00:20:50 |只看该作者
那是 STATIC INT 。 每次进入这个函数的时候,上次的值会保存下来的。自己搜搜 STATIC.

使用道具 举报

Rank: 4

声望
24
寄托币
758
注册时间
2007-6-15
精华
1
帖子
24
板凳
发表于 2011-4-11 00:10:52 |只看该作者
2# DriverEntry
嗯 是的,搞清楚了。谢啦。

使用道具 举报

Rank: 11Rank: 11Rank: 11Rank: 11

声望
3110
寄托币
48275
注册时间
2003-9-1
精华
44
帖子
1795

荣誉版主 GRE斩浪之魂 Golden Apple

地板
发表于 2011-4-11 02:45:39 |只看该作者
不客气

使用道具 举报

RE: 如何产生高斯随机数 [修改]
您需要登录后才可以回帖 登录 | 立即注册

问答
Offer
投票
面经
最新
精华
转发
转发该帖子
如何产生高斯随机数
https://bbs.gter.net/thread-1252910-1-1.html
复制链接
发送
报offer 祈福 爆照
回顶部