【发布时间】:2016-01-05 17:37:39
【问题描述】:
我需要使用 C 生成随机的 64 位无符号整数。我的意思是,范围应该是 0 到 18446744073709551615。 RAND_MAX 是 1073741823。
我在链接中找到了一些可能重复的解决方案,但答案大多连接了一些 rand() 结果或进行了一些增量算术运算。所以结果总是 18 位或 20 位。我还想要5、11、33387 等结果,而不仅仅是3771778641802345472。
顺便说一句,我对 C 语言真的没有太多经验,但任何方法、代码示例和想法都可能是有益的。
【问题讨论】:
-
不要连接
rand(),因为你会有各种各样的自相关效应,并且分布不会是均匀的。看看这些:math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/C-LANG/… -
I also want outcomes like 5, 11, 33387=> 1000000000000000000 和 99999999999999999999 之间的数字比 0 和 1000000000000000000 之间的数字多 10 倍......所以不要指望很快就会看到像 5 这样的数字 -
您似乎对基数为 10 的数字 (0...9) 和位(基数为 2 的数字)感到困惑。将这些分开思考,以便更好地理解。
-
你得到5的概率和你得到3771778641802345472的概率一样,等于1/2^64,一个非常小的数字。所以简单地连接位就可以了,除非你有更严格的要求
标签: c random unsigned-integer