线性同余算法 (LCG)

xiaoxiao2021-02-27  847

动机:为了校验客户端和服务器的数据,用到了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
转载请注明原文地址: https://www.6miu.com/read-888.html

最新回复(0)