一个函数,有一定概率返回true

elated 2012-01-31 04:05:06
函数f(int x),有x%概率返回true,这两种方法哪个更好?


//1
bool f(int x)
{
return rand() % 100 < x;
}

//2
bool f(int x)
{
return (float)rand() / (float) RAND_MAX < (float)x / (float)100;
}
...全文
453 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序员小迷 2012-02-08
  • 打赏
  • 举报
回复
第一种,简单,直接,效率高
龙行天下之Sky 2012-02-07
  • 打赏
  • 举报
回复
第二种方法虽然难理解,但是准确程度高一些
第一中在x小于35时,概率稍微打一下,因为随机数在0~65535之间
elated 2012-02-07
  • 打赏
  • 举报
回复
要生成的概率是百分之几
elated 2012-02-01
  • 打赏
  • 举报
回复
调用f的不同地方用不同的随机数表,即用相同的种子
Jinhao 2012-02-01
  • 打赏
  • 举报
回复
貌似都不好.有永远返回true的情况,或者永远返回false的情况
正在无聊中 2012-02-01
  • 打赏
  • 举报
回复
要不然就用VB

Public Function f(x As Integer)As Boolean
Dim iRand As Integer
iRand = Int(Rnd * 100)
f = iRand < x
End Function
'Sub Main里面写Randomize即可,然后调用函数
正在无聊中 2012-02-01
  • 打赏
  • 举报
回复
可以使用系统环境变量%random%
正在无聊中 2012-02-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 elated 的回复:]
引用 5 楼 downmooner 的回复:

前者是错的。

而且每次还要筛选下新种子.srand.否则连续调用多次后,会得到相同序列顺序的随机值。

每次调用srand也不行,调用一次选了新种子,就无法保证每个功能每次生成的随机数是符合均匀分布的。
理想的情形是这样,调用f的不同地方用不同的随机数表,即用相同的种子。但问题是,执行一次srand后rand就从随机数表的开始位置生成……
[/Quote]
只需要调用一次!不能调用很多次!
elated 2012-02-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 downmooner 的回复:]

前者是错的。

而且每次还要筛选下新种子.srand.否则连续调用多次后,会得到相同序列顺序的随机值。
[/Quote]
每次调用srand也不行,调用一次选了新种子,就无法保证每个功能每次生成的随机数是符合均匀分布的。
理想的情形是这样,调用f的不同地方用不同的随机数表,即用相同的种子。但问题是,执行一次srand后rand就从随机数表的开始位置生成了,而不能从之前生成随机数的位置后再生成。
elated 2012-02-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jinhao 的回复:]

//1
bool f(int x)
{
return rand() % 100 < x;
}

如果x>=100那永远都是true,如果x==0永远都是false

第二个同理

你没有说明x的定义域,不知道有没有这一要求
[/Quote]
x%
Jinhao 2012-02-01
  • 打赏
  • 举报
回复
//1
bool f(int x)
{
return rand() % 100 < x;
}

如果x>=100那永远都是true,如果x==0永远都是false

第二个同理

你没有说明x的定义域,不知道有没有这一要求
downmooner 2012-01-31
  • 打赏
  • 举报
回复
前者是错的。

而且每次还要筛选下新种子.srand.否则连续调用多次后,会得到相同序列顺序的随机值。

elated 2012-01-31
  • 打赏
  • 举报
回复
关于1,有个疑问
http://topic.csdn.net/u/20120131/10/0eb83ce4-6862-4071-a06a-3f963a2d2d2f.html
经实践检验,这种算法和要生成的概率总是有一定出入。似乎不正确。
elated 2012-01-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rrrfff 的回复:]
出于何种目的呢?
如何为“好”?
[/Quote]
更准确
mapoor 2012-01-31
  • 打赏
  • 举报
回复
我选1, 简单清晰易读
RLib 2012-01-31
  • 打赏
  • 举报
回复
出于何种目的呢?
如何为“好”?

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧