加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

此代码中的哪个位置生成一个随机数?

发布时间:2020-12-16 09:38:26 所属栏目:百科 来源:网络整理
导读:我遇到了 rgba的浮点随机数生成器: http://rgba.org/articles/sfrand/sfrand.htm 解释清楚,代码很简单.有一个问题:我无法弄清楚随机位的来源.以下代码段: static unsigned int mirand = 1;float sfrand( void ){ unsigned int a; mirand *= 16807; a = (m
我遇到了 rgba的浮点随机数生成器:

http://rgba.org/articles/sfrand/sfrand.htm

解释清楚,代码很简单.有一个问题:我无法弄清楚随机位的来源.以下代码段:

static unsigned int mirand = 1;

float sfrand( void )
{
    unsigned int a;
    mirand *= 16807;
    a = (mirand&0x007fffff) | 0x40000000;
    return( *((float*)&a) - 3.0f );
}

我确实尝试了compile this function并且总是得到-0.995993的结果,如果mirand从1开始,这是有意义的.我错过了什么,或者只是mirand种子?

解决方法

事实是,该代码不会生成随机数…它会生成伪随机数.假设你从相同的种子开始,外行人想象发生了什么的方式是你正在经历一个巨大的“随机”数字列表.最终,数字将重复,但一个好的公式是使这种重复发生在一个很大的间隔.

为了澄清,请查看Excel使用的rand公式:http://support.microsoft.com/kb/828795

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读