此代码中的哪个位置生成一个随机数?
发布时间: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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |