Sun 的个人资料孙涛的空间 : 大悲无泪,大悟无言,大笑无声。日志 工具 帮助

日志


6月25日

明天来长沙!

  明天就要来长沙了,也终于能见到久违的兄弟们拉.
 
6月14日

回来瞧瞧我的空间!

  几天没来,又差点遗忘这个空间,今晚独自在家,得有空来这里看看。
  旅游的计划落空了,应该也算意料之中了,虽然有些失望,我也没有太多的办法去争取!
  每天坚持看了会书,这种感觉还是不错的,至少心里还惦记着学习的事情,没有玩的太忘乎所以!
  担心和焦虑让我不安。
  晚饭过后,休息片刻,打篮球来消磨时间。篮球,打了这么多年,技术还是还是那么烂,想提高却没能苦下功夫。做什么事情都不能坚定信心,不能刻苦努力,就连玩都是这样。真怀疑自己在工作中的状况。
6月3日

随机数类的实现

#include <iostream>
#include <time.h>
using namespace std;
// generate random numbers
class randomNumber
{
 public:
  // initialize the random number generator
  randomNumber(long s = 0);
  // return a 32-bit random integer m, 1 <= m <= 2^31-2
  long random();
  // return a 32-bit random integer m, 0 <= m <= n-1,
  // where n <= 2^31-1
  long random(long n);
  // return a real number x, 0 <= x < 1
  double frandom();
 private:
  static const long A;
  static const long M;
  static const long Q;
  static const long R;
  long seed;
};
const long randomNumber::A = 48271;
const long randomNumber::M = 2147483647;
const long randomNumber::Q = M / A;
const long randomNumber::R = M % A;
randomNumber::randomNumber(long s)
{
 if (s < 0)
  s = 0;
 if (s == 0)
 {
  // get time of day in seconds since 12:00 AM,
  // January 1, 1970
  long t_time = time(NULL);
  // mix-up bits by squaring
  t_time *= t_time;
  // result can overflow. handle cases
  // > 0, < 0, = 0
  if (t_time > 0)
   s = t_time ^ 0x5EECE66DL;
  else if (t_time < 0)
   s = (t_time & 0x7fffffff) ^ 0x5EECE66DL;
  else
   s = 0x5EECE66DL;
 }
 seed = s;
}
long randomNumber::random()
{
 long tmpSeed = A * ( seed % Q ) - R * ( seed / Q );
 if( tmpSeed >= 0 )
   seed = tmpSeed;
 else
   seed = tmpSeed + M;
 return seed;
}
long randomNumber::random(long n)
{
 double fraction = double(random())/double(M);
 return int(fraction * n);
}
double randomNumber::frandom()
{
 return double(random())/double(M);
}
 
构造函数:randomNumber(long s=0)
   设定随机数发生的种子.使用默认值0时,系统时间为初始化种子;否则,用户提供发生器的种子.
 
double frandom(): 返回实数x, 0.0<=x<1.0
 
long random():返回long型随机整数m, 0<=m<exp(2,31)-1;
 
long random(long n):返回随机整数m, 0<=m<n;

应用程序:掷骰子游戏  先掷两个骰子,根据总点数确定赢家?
通过声明一个随机数对象die进行掷骰子游戏的模拟,这个随机数使用自动种子,表达式:
(1+die.random(6)) + (1+die.random(6)). 注意,这里最好使用一个随机数来获取两次随机值.若用两个随机数对象来分别获取,则获取的两个随机数可能一样.因为默认初始化都使用系统时间,由于速度原因,可能将同样的时间设定为随机种子.
 

6月2日

又过了一天!

  一天下来,什么也没干.到了晚上就开始感觉空虚!
 
6月1日

无聊的言语!

   时间一天天流逝,离工作日期越来越短,我已经习惯了呆在此处,过着这般悠闲生活.工作恐惧症和分离忧郁症困扰着我,不想离开,却由不得我.
   日子过得无聊和空虚,可却让我如此留恋,难以离舍!