【发布时间】:2017-04-10 21:45:17
【问题描述】:
我需要在不使用 random 函数的情况下生成一个随机数。我使用 system.nanotime 在 Java 中制作了它,但我不能在 C 中制作。我该怎么做?
【问题讨论】:
-
从
/dev/urandom获取随机字节?如果您解释了为什么您无法使用random().... 可能会有所帮助。 -
time() ^ getpid()是一个开始。你的操作系统是什么?,它需要有多随机?也许发布您的“我使用 system.nanotime 在 Java 中制作的”以了解您想要什么?你需要真正随机还是伪随机OK? -
我的操作系统是windows,我需要伪随机
-
也许你应该使用 Windows 自己的
CryptGenRandom()?在 Windows 的某些(旧)化身中存在错误版本(请参阅The Register,所以要小心,但使用它会为您节省很多麻烦。OTOH,它可能超出您的需要;它是加密的随机,您可能不需要那么多随机性(如果纳秒计数器足够随机,您可能不需要加密随机性)。 -
PRNG 算法有数百种。选择一个并实施你自己的。从简单的事情开始,比如 Marsaglia XorShift。