我想知道drand48()的默认种子是什么,也就是说,如果我在调用srand48()之前没有显式地使用drand48()
我检查了glibc 2.23(我目前使用的版本)的源代码,我认为它是零,但如果有人能验证它,那就太好了。

最佳答案

POSIX没有强制的特定值,相反,它说应该调用其中一个初始化函数:
srand48()seed48()lcong48()函数是初始化的
入口点,其中一个应该在drand48()之前调用,
lrand48()mrand48()被调用。(尽管不建议
实践中,应提供恒定的默认初始值设定项值
如果在没有
之前对初始化入口点的调用。)
一般来说,使用使用全局共享状态的函数并不是一个好主意。这组函数具有将其状态作为函数参数接收的替代项。
如果不调用这些初始化函数中的任何一个,则使用括号中的短语。它基本上说内部状态应该用默认值初始化。这不等于用特定参数调用drand48(),因为该函数将低位设置为固定值lrand48()。它可能相当于调用mrand48(),但这还不完全清楚。术语常量默认初始值设定项值可能意味着每个实现都提供其默认值,或者应该使用C的默认初始值设定项(all bitsrand48)。

10-07 12:49
查看更多