![]() |
|
||||||||||||||
| . 网站首页 . 新闻 . 新品 . 方案 . 专访 . 活动 . DSP . EDA . 评测室 . 技术文库 . 会员区 . 商城 . 服务导航 . 邮购 . 资源 . | ||
|
||
|
|||||
| lRandom Number Generators(随机数生成) | |||||
作者:61IC 文章来源:本站原创 点击数: 更新时间:2007-1-22 ![]() |
|||||
|
lRandom Number Generators(随机数生成) Random Number Generators ---------------------------------------------------------------------------------------------------------------- /* ranl.c - linearly interpolated random generator of period D */ double ran(); /* uniform generator */ void cdelay2(); /* circular delay */ double ranl(D, u, q, iseed) /* usage: y = ranl(D, u, &q, &iseed); */ int D, *q; /* \(q\) is cycled modulo-\(D\) */ double *u; /* \(u\) = 2-dimensional array */ long *iseed; /* \(q\), iseed are passed by address */ { double y; int i; i = (D - *q) % D; /* interpolation index */ y = u[0] + (u[1] - u[0]) * i / D; /* linear interpolation */ cdelay2(D-1, q); /* decrement \(q\) and wrap mod-\(D\) */ if (*q == 0) { /* every \(D\) calls, */ u[0] = u[1]; /* set new \(u[0]\) and */ u[1] = ran(iseed) - 0.5; /* get new \(u[1]\) (zero mean) */ } return y; }
---------------------------------------------------------------------------------------------------------------- /* ranh.c - hold random number generator of period D */ double ran(); /* uniform generator */ void cdelay2(); /* circular delay */ double ranh(D, u, q, iseed) /* usage: y = ranh(D, u, &q, &iseed); */ int D, *q; /* \(q\) is cycled modulo-\(D\) */ double *u; /* \(u\) = 1-dimensional array */ long *iseed; /* \(q\), iseed are passed by address */ { double y; y = u[0]; /* hold sample for \(D\) calls */ cdelay2(D-1, q); /* decrement \(q\) and wrap mod-\(D\) */ if (*q == 0) /* every \(D\) calls, */ u[0] = ran(iseed) - 0.5; /* get new \(u[0]\) (zero mean) */ return y; }
---------------------------------------------------------------------------------------------------------------- /* ran double ranh(); /* random hold periodic generator */ double ran int B, *q; /* \(q, u\) are \(B\)-dimensional */ double *u; long *iseed; /* passed by address */ { double y; int b; for(y=0, b=0; b<B; b++) y += ranh(1<<b, u+b, q+b, iseed); /* period = (1<<b) = 2\(\sp{b}\) */ return y / B; }
---------------------------------------------------------------------------------------------------------------- /* ran.c - uniform random number generator in [0, 1) */ #define a 16807 /* that is, \(a = 7\sp{5}\) */ #define m 2147483647 /* that is, \(m = 2\sp{31}-1\) */ #define q 127773 /* note, \(q = m/a\) = quotient */ #define r 2836 /* note, \(r = m\%a\) = remainder */ double ran(iseed) /* usage: u = ran(&iseed); */ long *iseed; /* iseed passed by address */ { *iseed = a * (*iseed % q) - r * (*iseed / q); /* update seed */ if (*iseed < 0) /* wrap to positive values */ *iseed += m; return (double) *iseed / (double) m; } ----------------------------------------------------------------------------------------------------------------
/* gran.c - gaussian random number generator */ double ran(); /* uniform generator */ double gran(m, s, iseed) /* usage: x = gran(m, s, &iseed); */ double m, s; /* \(m\) = mean, \(s\sp{2}\) = variance */ long *iseed; /* iseed passed by address */ { double v = 0; int i; for (i = 0; i < 12; i++) /* sum 12 uniform random numbers */ v += ran(iseed); return s * (v - 6) + m; /* adjust mean and variance */ }
|
|||||
| 欢迎点击进入:TI德州中文网 (国内唯一针对TI应用的中文技术网站) 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 没有相关文章 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|
|