5D空间

学习总结与经验交流

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::

  只有一个double参数,以百分比的形式给出发生概率。则函数每次调用按照这个概率返回true。
  提示:函数内部会调用srand( time( 0 ) )。特别情况下需谨慎。

#ifndef PROBABILITY_H
#define PROBABILITY_H

#include 
<cstdlib>
#include 
<iostream>
#include 
<ctime>
using namespace std;

bool probability( double p ) //大概能精确到小数点后一位
{
    
double happeness;
    
static bool flag = false;

    
if ( flag == false )
    
{
        srand( time( NULL ) );
        flag 
= true;
    }


    
/*
    happeness = rand() % 10001;
    happeness /= 100;
    这样的运算得到的值概率是不满足题意的。
    所以rand() % 这样的运算其实并没有实现真正的公平随机。
    
*/


    happeness 
= rand();
    happeness 
/= RAND_MAX;
    happeness 
*= 100;
    
    
return ( happeness <= p );
}


#endif
posted on 2011-04-03 19:56 今晚打老虎 阅读(1453) 评论(4)  编辑 收藏 引用 所属分类: 我的开源库

评论

# re: probability(概率发生器)[未登录] 2011-04-05 00:09 connor
其实关于只执行一次的情行,有一个技巧,呵呵,
static bool bRun_Once = (srand((unsigned)time(0)), true);
这样就可以只执行一次了,不过就是只读性差点。。。。  回复  更多评论
  

# re: probability(概率发生器) 2011-04-05 00:25 今晚打老虎
@connor
这个兄台的这句表达我不懂该怎么理解,汗啊,求解释。  回复  更多评论
  

# re: probability(概率发生器) 2011-04-07 00:57 hook
@今晚打老虎
他的意思是说在局部static变量初始化的时候就可以调用srand(使用逗号表达式),不用if/else去判断。不过确实很难看也难懂,没有必要这么做。  回复  更多评论
  

# re: probability(概率发生器) 2011-05-05 15:38 egmkang
逗号 表达式
从左到右计算,然后只取最后一个值....  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理