[vb]RND随机数的原理 Microsoft Visual Basic RND 函数中的伪随机数字生成使用线性congruential算法。 下面的伪代码文档使用的算法:
x1 = ( x0 * a + c ) MOD (2^24)
位置:
x = 新的值 x0 = 以前的值 (初始值为327680) a = 1140671485 c = 12820163
套用公式后,返回的整数的余数就是我们的随机数了。 表达式 x1/(2^24)将返回介于0.0到由RND函数返回的1.0之间的浮点数。 在VB内部无法实现这一运算,因为VB内部不支持无符号长整形数据。
下面的 C/C++ 代码可生成Visual Basic 生成的伪随机数字的前十个:
#include "stdafx.h"
int main(int argc, char* argv[])
{
unsigned long rndVal;
rndVal = 0x50000L;
int i;
float rndFloat;
for (i=0;i<10;i++)
{
rndVal = (rndVal * 0x43fd43fdL + 0xc39ec3L) & 0xffffffL;
rndFloat = (float)rndVal / (float)16777216.0;
printf("Value is %.15f
",rndFloat);
}
return 0;
}