資源簡(jiǎn)介
改進(jìn)的快速M(fèi)ersenne twister隨機(jī)數(shù)算法 非常適合做FPGA算法使用 隨機(jī)性好,占用資源非常少,標(biāo)準(zhǔn)算法的1/1000, 非常適合用來做快速加密用,在我的幾個(gè)項(xiàng)目中使效果非常好。

代碼片段和文件信息
#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;
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????1736??2017-06-03?09:35??MTSRandom.cpp
評(píng)論
共有 條評(píng)論