生成一定概率的算法
程序中有好多功能是要一定概率成功的, 如果这样实现算法
- C/C++ code
bool Random(int range){ return rand() % 100 < range;}
比如A功能90%的概率成功,B功能20%的概率成功。
如果程序逻辑第一次执行到A功能,它的概率是正确的,执行N次,也是正确的。
但如果在执行A后执行B功能,它的概率还正确么?
我明白如果把rand()生成的随机数保存起来,只供一个功能使用,那么它的结果是正确的,这没有疑问。
但这样做会增加程序是存储开销。
关于生成概率,还有什么比较好的算法么?
[解决办法]
如果rand()函数返回的是真随机数,那么执行A后执行B功能,它的概率是正确的;
但是实际上rand()函数是根据种子,返回的一组固定的“随机数”,种子相同,那么就是同一组随机数,所以肯定有影响,尤其你用的是%运算;不过一般应用都足够了,除非你要做特殊运算,需要真随机数,那只有用相关硬件才能实现。
[解决办法]
只保存一个变量对程序开销的增加可以忽略不计
[解决办法]
每次运行的时候改变下rand()的种子吧,或是自己实现随机数算法
[解决办法]
每次运行的时候改变下rand()的种子吧,或是自己实现随机数算法
[解决办法]
每次运行的时候改变下rand()的种子吧,譬如,取系统的时间生成一个数作为新种子。
[解决办法]
这功能需求,让人不得不想到网游boss装备掉落啊,哈哈~~~
MSDN的例子里也是用系统时间做种子的,可能要研究rand()实现原理了……
其实关键看行为吧,如果A,B,A+B,B+A,测试结果概率都跟预期符合就没问题了啊
[解决办法]
srand(time(NULL))
[解决办法]
rand()函数应该够用了, A和B同时使用也不冲突阿。
[解决办法]
自己重新封装伪随机数发生函数,真正的随机数发生器恐怕要依赖于硬件.
参考
[解决办法]