是否有一种直接的方法来扩展这个rand()函数(来自K& R的“C编程语言”)以产生64个随机位而不是15个?
int rand()
{
rand_next = rand_next * 1103515245 + 12345;
return (unsigned int)(rand_next/ 65536) % 32768;
}
编辑:我的意思是改变它使用64位数字和不同的幻数。而不是把它扔进for循环。
编辑#2:这个算法实际上是15位的随机性,而不是30.我原来的帖子中的愚蠢数学错误。
答案 0 :(得分:3)
存在任意位数的线性同余生成器。
对于64位,MMIX(例如)使用以下递归公式:
x = x * 6364136223846793005 + 1442695040888963407;
答案 1 :(得分:0)
PRNG需要特殊号码才能运作。列出了一些here。其中一个是64位。
n = (n * 6364136223846793005 + 1442695040888963407) & 0xFFFFFFFFFFFFFFFF;
或
n = (n * 0x5d588b656c078965 + 0x269ec3) & 0xFFFFFFFFFFFFFFFF;
还有其他类型的PRNG,但我相信LCRNG(线性同余)是最简单的。