读书人

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

发布时间: 2012-03-26 15:46:56 作者: rapoo

一个函数,有一定概率返回true
函数f(int x),有x%概率返回true,这两种方法哪个更好?

C/C++ code
//1bool f(int x){   return rand() % 100 < x;}//2bool f(int x){   return (float)rand() / (float) RAND_MAX < (float)x / (float)100;}


[解决办法]
出于何种目的呢?
如何为“好”?
[解决办法]
我选1, 简单清晰易读
[解决办法]
前者是错的。

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


[解决办法]
探讨
引用:

前者是错的。

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

每次调用srand也不行,调用一次选了新种子,就无法保证每个功能每次生成的随机数是符合均匀分布的。
理想的情形是这样,调用f的不同地方用不同的随机数表,即用相同的种子。但问题是,执行一次srand后rand就从随机数表的开始位置生成……

[解决办法]
可以使用系统环境变量%random%
[解决办法]
要不然就用VB
VB code
Public Function f(x As Integer)As BooleanDim iRand As IntegeriRand = Int(Rnd * 100)f = iRand < xEnd Function'Sub Main里面写Randomize即可,然后调用函数
[解决办法]
貌似都不好.有永远返回true的情况,或者永远返回false的情况
[解决办法]
//1
bool f(int x)
{
return rand() % 100 < x;
}

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

第二个同理

你没有说明x的定义域,不知道有没有这一要求
[解决办法]
第二种方法虽然难理解,但是准确程度高一些
第一中在x小于35时,概率稍微打一下,因为随机数在0~65535之间
[解决办法]
第一种,简单,直接,效率高

读书人网 >C++

热点推荐