⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 randnumber.h

📁 简单的纸牌游戏,请初学者
💻 H
字号:
#ifndef _STDIO_H_
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <assert.h>
#endif

typedef unsigned long uint32;            // 32 bit unsigned integer

class TMotherRandomGenerator {           // encapsulate random number generator
  public:
  void RandomInit(uint32 seed);          // initialization
  void SetInterval(int min, int max);    // set interval for iRandom
  int iRandom();                         // get integer random number
  double Random();                       // get floating point random number
  TMotherRandomGenerator(uint32 seed=-1);// constructor
  protected:
  double x[5];                           // history buffer
  int imin, iinterval;                   // interval for iRandom
  };


// constructor:
TMotherRandomGenerator::TMotherRandomGenerator(uint32 seed) {
  // check that compiler supports 80-bit long double
  assert(sizeof(long double)>9);
  // initialize
  RandomInit(seed);  SetInterval(0, 99);}


// set interval for iRandom:
void TMotherRandomGenerator::SetInterval(int min, int max) {
  imin = min; iinterval = max - min + 1;}


// returns a random number between 0 and 1:
double TMotherRandomGenerator::Random() {
  long double c;
  c = 2111111111.0 * x[3] +
      1492.0 * (x[3] = x[2]) +
      1776.0 * (x[2] = x[1]) +
      5115.0 * (x[1] = x[0]) +
      x[4];
  x[4] = floorl(c);
  x[0] = c - x[4];
  x[4] = x[4] * (1./(65536.*65536.));
  return x[0];}


// returns integer random number in desired interval:
int TMotherRandomGenerator::iRandom() {
  int i = iinterval * Random();
  if (i >= iinterval) i = iinterval;
  return imin + i;}


// this function initializes the random number generator:
void TMotherRandomGenerator::RandomInit (uint32 seed) {
  int i;
  // make sure seed != 0
  if (seed==0) seed = -1;

  // make random numbers and put them into the buffer
  for (i=0; i<5; i++) {
    seed ^= seed << 13; seed ^= seed >> 17; seed ^= seed << 5;
    x[i] = seed * (1./(65536.*65536.));}
  // randomize some more
  for (i=0; i<19; i++) Random();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -