网页功能: 加入收藏 设为首页 网站搜索  
精美的随机数生成器程序
发表日期:2006-09-03作者:[转贴] 出处:  

/////////////////////////////////////////////////////////////////////////////

// ELEMENT GDI/DX Game Engine [Version 2002/3/1]

/////////////////////////////////////////////////////////////////////////////

// Original Author : 邱海峰[Southdy]

// OICQ : 359766

// EMAIL: topmud@263.net

/////////////////////////////////////////////////////////////////////////////

// DESCRIPTION :

//

// OTHER : 邱海峰创建于2002/3/1

//

// 使用此随机数生成器者请无条件保留以下版权声明:

// (C) Copyright Beman Dawes 1998. Permission to copy, use, modify, sell and

// distribute this software is granted provided this copyright notice appears

// in all copies. This software is provided "as is" without express or implied

// warranty, and with no claim as to its suitability for any purpose.

/////////////////////////////////////////////////////////////////////////////

#pragma once
/////////////////////////////////////////////////////////////////////////////

// 包含文件

/////////////////////////////////////////////////////////////////////////////

#include <cassert>
/////////////////////////////////////////////////////////////////////////////

class EK_Rand
{
// 不要有改动这几个常量的想法,否则……打你屁屁!

enum
{
modulus = 2147483647L,
multiplier = 48271L,
validation = 399268537L,
q = modulus / multiplier,
r = modulus % multiplier
};
// 种子数

long value; // 0 < value <= modulus

public:
explicit min_rand( long seed_value=1 ) : value( seed_value )
{
assert( value > 0 && value <= modulus );
}
 

operator long() const { return value; }

double fvalue() const { return double(value) / modulus; }

min_rand& operator=( long new_value )
{
value = new_value;
assert( value > 0 && value <= modulus );
return *this;
}

long operator++()
{
value = multiplier*(value%q) - r*(value/q);
if ( value <= 0 ) value += modulus;
assert( value > 0 && value <= modulus );
return value;
}

long operator++(int) { long temp = value; operator++(); return temp; }

long ten_thousandth() const { return validation; }

long operator()( long n ) { return operator++() % n; }

long operator()() { return operator++(); }

typedef long argument_type;
typedef long result_type;
};
/////////////////////////////////////////////////////////////////////////////



在boost里看到的绝对好东东。
在保留原作者版权声明的条件下可以随意使用 :)
我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 精美的随机数生成器程序
本类热点文章
  A*寻路算法(For 初学者)
  A*寻路初探 GameDev.net
  用有限状态机实现的迷宫求解
  计算机中随机数的产生
  精美的随机数生成器程序
  即时战略游戏中如何协调对象移动
  计算几何算法概览
  飞行射击游戏中的碰撞检测
  电脑AI浅谈
  五子棋算法探讨
  小谈网络游戏同步
  五子棋算法
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00393