首页 > 解决方案 > 为什么可重入随机生成器 rand_r() 被认为是弱的?

问题描述

状态的手册页rand_r()

rand_r() 的 seedp 参数所指向的值仅提供非常少量的状态,因此该函数将是一个弱伪随机生成器。

有人能解释一下这句话是什么意思吗?种子值如何“只提供非常少量的状态”,这又如何削弱生成器?

在我开始使用 GNU 扩展drand48_r()作为更好的选择之前,我想确保我做出了明智的选择。也许对于某些用例rand_r()来说就足够了,否则它的可用性将毫无意义。

编辑回应评论:

我希望更好地理解功能和解释它们的方式,最好不要参考可能限制解释的特定用例。网上讨论了很多用例,但是关于功能的一般知识要么缺乏要么难以理解。SO过去在问答介绍方面做得很好,因此是我的问题。

如果有帮助,我已经做了一个测试来比较rand()rand_r(),生成两个随机 RGB 图像,其中像素是通过以下方式生成的:

pxsPtr[i] = (uint8_t) rand() % 255; // rand() version

pxsPtr[i] = (uint8_t) rand_r(&randRseed) % 255; // rand_r() version

我对它们的相似性感到惊讶,现在更渴望获得我问题的答案。

rand() 测试

rand_r() 测试

标签: crandom

解决方案


推荐阅读