C 为什么可重入随机生成器rand_r()被认为是弱的?

C 为什么可重入随机生成器rand_r()被认为是弱的?,c,random,C,Random,rand\u r()的手册页说明: rand_r()的seedp参数指向的值只提供非常少量的状态,因此该函数将是一个弱伪随机生成器 有人能解释一下这句话的意思吗?种子值如何“只提供极少量的状态”,这又如何削弱生成器 在我开始使用GNU扩展drand48_r()作为更好的选择之前,我想确保我做出了明智的选择。也许对于某些用例来说,rand\u r()就足够了,否则就没有意义了 编辑以回应评论: 我希望更好地理解函数及其解释方式,最好不要参考可能限制解释的特定用例。网上讨论的用例很多,但是关于函数的

rand\u r()
的手册页说明:

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

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

在我开始使用GNU扩展
drand48_r()
作为更好的选择之前,我想确保我做出了明智的选择。也许对于某些用例来说,
rand\u r()
就足够了,否则就没有意义了

编辑以回应评论:

我希望更好地理解函数及其解释方式,最好不要参考可能限制解释的特定用例。网上讨论的用例很多,但是关于函数的一般知识要么缺乏,要么难以理解。因此,在过去的问答介绍中,我的问题是非常棒的

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

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

pxsPtr[i] = (uint8_t) rand_r(&randRseed) % 255; // rand_r() version
我对他们的相似性感到惊讶,现在更渴望得到我问题的答案


seedp
是指向unsigned int的指针,因此(在典型系统上)最多有32位状态。请列出一些用例示例。如果它们包括随机化以生成宽带随机性,而没有偏差,那么
rand()
rand\u r()
,等等将不适用于您,否则它们就可以了。这里有一些相关的链接,主题是:,你使用生成器的目的是什么?两者都不是很好的随机数生成器;它们都不适合任何你需要不可预测的地方。你应该澄清你想从这个问题中得到什么。对于所有的评论,请看我对这个问题的编辑。