資源簡介
改進的快速Mersenne twister隨機數算法 非常適合做FPGA算法使用 隨機性好,占用資源非常少,標準算法的1/1000, 非常適合用來做快速加密用,在我的幾個項目中使效果非常好。

代碼片段和文件信息
#include?“stdafx.h“
#define??MT_LEN???4
#define??MT_VL????2
#define??MSK_UP???0xFFFE0000
#define??MSK_DN???0x0001FFFF
#define??MERS_A???0xF4973C15
#define??MERS_B???0x452796A4
#define??MERS_C???0x165F7B46
static?unsigned?int?mt[MT_LEN];
static?unsigned?int?mti?=?0;
static?void?init0(unsigned?int?seed)
{
????unsigned?int?y;
????unsigned?int?i;
????mt[0]?=?seed;
????for(?mti?=?1;?mti?????????mt[mti]?=?(((mt[mti-1]?^?(mt[mti-1]>>3))<<10)|0x025D)?+?mti;????
????}
????
????for(?i?=?0;?i?????????y?=?(mt[i]?&?MSK_UP)?|?(mt[i+1]?&?MSK_DN);
????????mt[i]?=?mt[i+MT_VL]?^?(y>>1)?^?(((y?&?0x01)?==?1)???MERS_A?:?0);
????}
????for(?;?i?????????y?=?(mt[i]?&?MSK_UP)?|?(mt[i+1]?&?MSK_DN);
????????mt[i]?=?mt[i+(MT_VL?-?MT_LEN)]?^?(y>>1)?^?(((y?&?0x01)?==?1)???MERS_A?:?0);
????}
????y?=?(mt[i]?&?MSK_UP)?|?(mt[0]?&?MSK_DN);
????mt[i]?=?mt[MT_VL?-?1]?^?(y>>1)?^?(((y?&?0x01)?==?1)???MERS_A?:?0);
????mti?=?0;
????return;
}
static?unsigned?int?BRandom(void)
{
????unsigned?int?ret?=?0;
????
????ret?=?mt[mti];
????ret?^=?ret>>13;
????ret?^=?(ret<<7)?&?MERS_B;
????ret?^=?(ret<<15)?&?MERS_C;
????ret?^=?ret>>8;
????mt[mti++]?=?ret?+?1;
????if(?mti?==?MT_LEN?)?{
????????mti?=?0;
????}
????return?ret;
}
int?_tmain(int?argc?_TCHAR*?argv[])
{
????unsigned?int?i;
????unsigned?int?firstr;
????unsigned?int?t;
????init0(0x33914F8D);
????firstr?=?BRandom();
????printf(“%08X\r\n“?firstr);
????i?=?1;
????while(1)?{
????????t?=?BRandom();
????????if(?t?==?firstr?)?{
????????????break;
????????}
????????i++;
????????printf(“%08X\r\n“?t);
????}
????printf(“[%lu]\r\n“?i);
???
return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????1736??2017-06-03?09:35??MTSRandom.cpp
- 上一篇:USB設備狀態監控插拔事件響應等。
- 下一篇:串口發送接收圖片文件
評論
共有 條評論