线性同余算法 (LCG)
生活随笔
收集整理的這篇文章主要介紹了
线性同余算法 (LCG)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
動(dòng)機(jī):為了校驗(yàn)客戶端和服務(wù)器的數(shù)據(jù),用到了boost::rand48 這個(gè)隨機(jī)生成器算法。可怎么都找不到C# 與C++ 相同的rand48隨機(jī)生成器算法的API以及庫(kù),于是決定自己寫個(gè) 隨機(jī)數(shù)生成器吧。
線性同余方法(LCG)是個(gè)產(chǎn)生偽隨機(jī)數(shù)的方法。
計(jì)算公式:RandSeed=(A*RandSeed+C)%M
其中A,C,M是產(chǎn)生器設(shè)定的常數(shù)。
下面是我寫的C#與C++ 相同的偽隨機(jī)數(shù)代碼:
#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%bb + min;return value;}std::string rand_str(std::string data, int count){std::string retstr;for (uint32_t i = 0; i<count; i++){retstr += data[rand(0, data.length())];}return retstr;} private:uint64_t rand_seed; };#endif
class xk_Random{public xk_Random(ulong seed = 0){rand_seed = seed;}public ulong rand(ulong min, ulong max){System.Diagnostics.Debug.Assert(max > min && min >= 0);ulong A = 0x5DEECE66D;ulong C = 0xB;ulong M = ((ulong)1 << 48);rand_seed = (rand_seed * A + C) % M;ulong bb = max - min;ulong value = rand_seed % bb + min;return value;}private ulong rand_seed;};
總結(jié)
以上是生活随笔為你收集整理的线性同余算法 (LCG)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: delphi实现延时的方法,很多人首先就
- 下一篇: 专升本计算机综合-数据结构篇