分享一个简易的随机数算法,请大家指正

2020-01-14 18:53发布

用单片机生成随机数算法,伪随机,使用姚老板的12c5a60s2芯片,详情见文档
输入[0,65536)
输出[0,65536)
-
-
-
U16 rand65536( CU16 seed )/*2018.04.13Python+excel验证*/
{
        code U8 table[256] =
        {
                108,166,74,119,198,161,224,60,106,227,26,20,44,55,172,91,69,194,70,125,249,188,113,8,155,114,
                205,37,63,47,57,217,177,71,244,65,52,61,132,123,196,242,43,73,12,187,247,151,184,81,90,255,
                175,51,143,59,239,27,186,7,2,46,24,131,109,96,203,42,218,146,174,72,110,102,160,169,222,56,
                207,13,180,250,116,67,171,84,100,9,137,6,129,141,154,240,122,202,219,163,130,216,75,135,221,98,
                157,88,226,253,33,101,103,138,204,121,127,193,89,85,62,94,139,86,34,115,168,152,142,16,126,170,
                120,15,76,10,147,29,183,4,148,40,66,32,87,105,124,214,162,140,234,235,68,104,220,92,167,212,
                233,14,248,78,210,144,236,112,209,201,19,93,97,182,58,118,153,38,211,50,192,45,35,254,165,
                0,229,237,25,208,1,23,17,158,21,95,195,164,223,243,48,199,181,145,53,228,83,190,117,5,
                173,54,197,18,80,231,159,200,213,252,128,215,31,150,49,64,251,179,3,82,28,206,230,246,225,
                11,36,149,136,245,22,232,30,238,185,191,176,241,77,39,156,41,99,189,134,79,133,178,111,107
        };

        auto xdata U16 t1, t2;
        t1 = seed / 256;
        t2 = seed % 256;
       
        return( table[( t1 + t2 ) % 256 ] * 256 + table[ 255 - t2 ] );
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
45条回答
shange144k8
1楼-- · 2020-01-18 19:27
 精彩回答 2  元偷偷看……
磊磊映画
2楼-- · 2020-01-18 23:36
shange144k8 发表于 2018-4-14 15:50
rand()函数产生的数貌似随机,但是如果种子相近随机也相近,时间戳和ad是真随机,但如果我要取6万个数 ...

时间戳肯定不会重复啊,时间戳是从1970年至今的秒计时数,最大范围至2的32次 幂,6W个不算什么
shange144k8
3楼-- · 2020-01-19 04:04
磊磊映画 发表于 2018-4-16 09:02
时间戳肯定不会重复啊,时间戳是从1970年至今的秒计时数,最大范围至2的32次 幂,6W个不算什么 ...

是啊,就是数太大,如果要把这个大数拿来去对应一个0~到6万以内的数,就有重复的可能
shange144k8
4楼-- · 2020-01-19 09:20
磊磊映画 发表于 2018-4-16 09:02
时间戳肯定不会重复啊,时间戳是从1970年至今的秒计时数,最大范围至2的32次 幂,6W个不算什么 ...

能贴具体代码来学习下么
磊磊映画
5楼-- · 2020-01-19 12:28
shange144k8 发表于 2018-4-16 09:36
能贴具体代码来学习下么

u16 Adapter_GetRandSN(void)
{
    static u16 rand_SN=0;
    if(rand_SN==0) {
        srand(g_VendoutSerialNumberSeed);/*载入随机种子*/               
        rand_SN = rand();
        if(rand_SN ==0) rand_SN = 100;
    }

    return rand_SN++;
}



/**********************************
//名称:        SysTick_Handler
//功能:        系统滴答中断函数
//入口参数:        无
//出口参数:        无
**********************************/
void SysTick_Handler(void)
{
        
    g_VendoutSerialNumberSeed++; //出货流水号随机种子数
  
            
}
fenxiang1103
6楼-- · 2020-01-19 12:47
 精彩回答 2  元偷偷看……

一周热门 更多>