动机:为了校验客户端和服务器的数据,用到了boost::rand48 这个随机生成器算法。可怎么都找不到C# 与C++ 相同的rand48随机生成器算法的API以及库,于是决定自己写个 随机数生成器吧。
线性同余方法(LCG)是个产生伪随机数的方法。
计算公式:RandSeed=(A*RandSeed+C)%M
其中A,C,M是产生器设定的常数。
下面是我写的C#与C++ 相同的伪随机数代码:
#ifndef XK_Random_H
#define XK_Random_H
#include <stdio.h>
#include <time.h>
#include <iostream>
#include <math.h>
#include <string>
#include <cassert>
class xk_Random
{
public:
xk_Random(uint64_t seed)
{
rand_seed = seed;
}
uint64_t rand(uint64_t min, uint64_t max)
{
assert(max>min && min>=0);
uint64_t A = 0x5DEECE66D;
uint64_t C = 0xB;
uint64_t M = ((uint64_t)1 << 48);
rand_seed = (rand_seed * A + C) % M;
uint64_t bb = max - min;
uint64_t value = rand_seed