非等概率随机.doc_第1页
非等概率随机.doc_第2页
非等概率随机.doc_第3页
非等概率随机.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

非等概率随机 对一序列数字随机时一般都是等概率的,但有时候希望某些数字出现的可能性更高一些。下面是本人实现的一个非等概率随机函数,可以对序列中多个数字设置不同的出现频率。限于编码水平,如有需要改进之处敬请指点./*rand_seting.h*/#ifndef RAND_SETING_H#define RAND_SETING_H#include #include /*随机条件结构:*定义min到max之间个数字出现的频率,默认为1次.*如果希望某些数字出现频率大于1次,则把这些数字存入数字集(由pmore指向),*对应的出现频率存入频率集(由ptms指向),这两个缓冲区由用户定义及设置,*lmore和ltms分别为对应的缓冲区长度,建议两缓冲区长度相等,允许ltms lmore,*但绝不允许ltms min = min;rt-max = max;rt-pmore = pm;rt-lmore = lm;rt-ptms = pt;rt-ltms = lt;return rt;/*获取随机数,存放在bufret数组中,个数为数组长度bufsz*返回值: 出现非法数据返回-1;否则成功返回,值为获取到随机数的个数(bufsz)*/int rdget(const struct rd_dat *rt, long *bufret, long bufsz)long rval, exmax = 0;long i, j, tmp;/ 验证数据的合法性if (rt-min rt-max | rt-lmore != rt-ltms | bufsz pmore = NULL | rt-ptms =NULL | bufret =NULL)return -1;for (i = 0; i lmore; i+)if (rt-pmorei min | rt-pmorei rt-max)return -1;if (rt-ptmsi max - rt-min + 1;for (i = 0; i ltms; i+)exmax += rt-ptmsi - 1;/ 获取bufsz个随机数srand(time(NULL); / 初始化随机数发生器for (i = 0; i min;if (rval max) / 位于min与max之间的随机数bufreti = rval;continue;/ 大于max的随机数(即:出现频率高的数)tmp = rt-max;for (j = 0; j ltms; j+)tmp += rt-ptmsj - 1;if (

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论