經過一段時間的問題解答和搜索結果,我發現自己的痛苦是沒有任何「隨機」發生器是真正隨機的,我的意思是隨機的?完全隨機性,我在編譯它們並運行多次運行後發現的所有算法都會打印大量值,結果是相同的,或者至少可以找到一個模式。這是非常糟糕的,我爲MMO服務器做了一個隨機數字生成器,其功能將來自升級項目,將一組玩家分成團隊,模式總是不好,想象每次我重新啓動程序時生成相同的數字順序。我的想法是,得到一個隨機數的最好方法是攪亂時間,你永遠不知道什麼時候會發生什麼,以及時間是否精確甚至更好。我想出了一個很好的解決方案。一個更好的實數發生器
inline __int64 NanoTime()
{
struct { int low, high; } Nano;
__asm push EAX
__asm push EDX
__asm __emit 0fh __asm __emit 031h
__asm mov Nano.low, EAX
__asm mov Nano.high, EDX
__asm pop EDX
__asm pop EAX
return *(__int64 *)(&Nano);
}
static DWORD g_Prev = NanoTime();
__int64 xRandom(void)
{
__int64 Now = NanoTime() - g_Prev/2;
CString strRand, strLast;
strRand.Format("%I64d", Now);
strLast = strRand.GetAt(strRand.GetLength()-1);
strLast += strRand.GetAt(strRand.GetLength()-2);
return(atoi(strLast));
}
Althought文本大,問題很簡單,我需要對實數發生器,它具有最小的算法儘可能的方向,我的解決方案被稱爲幾十萬次,每次二是不是我有什麼尋找,它只是在這裏給我一個我需要的方向暗示。
我已經看過boost
,比如不使用最低位的命令,time(0)
等等。但是都有一個模式。
我建議你在密碼部分發帖。現實情況是,真正的隨機性無法得到保證,但要具有一些隨機性的外表,您需要通過統計測試來運行算法以確保隨機性。 –
Random.org有[API](http://www.random.org/clients/http/)。 –
http:// stackoverflow。com/questions/1912199/better-random-algorithm – adripanico