除了加密安全性之外,有很多系统rand()具有相当严重的随机性属性,如果您需要更好的东西,标准建议是使用非标准random().
rand在许多系统上的不良特性包括:
rand()%2保证交替 0,1,0,1...)。所以我(不情愿的)建议是,如果您需要“良好”的随机性(例如,对于蒙特卡罗模拟),您可能非常想使用非标准替代品进行研究rand()。(我关于 C 的永恒问题之一是为什么任何供应商都会花时间部署非标准random()而不是简单地制作rand()。我确实知道规范的答案,尽管它们很糟糕。)
另请参阅这个类似的问题。
rand() 遭受一些严重的弊端。
至于POSIX C替代品,有random和random_r。OpenSSL提供了更多先进的生成随机数的方法。
如果可以选择在项目中包含C ++,则C ++(C ++ 11和更高版本)库还提供了许多随机数函数。
rand()是的,用来获取伪随机数是可以的。事实上,这就是整个要点rand()。对于简单的任务,可以确定性,您甚至可以为简单起见设置系统时钟。