我想知道drand48()
的默认种子是什么,也就是说,如果我在调用srand48()
之前没有显式地使用drand48()
?
我检查了glibc 2.23(我目前使用的版本)的源代码,我认为它是零,但如果有人能验证它,那就太好了。
最佳答案
POSIX没有强制的特定值,相反,它说应该调用其中一个初始化函数:srand48()
、seed48()
和lcong48()
函数是初始化的
入口点,其中一个应该在drand48()
之前调用,lrand48()
或mrand48()
被调用。(尽管不建议
实践中,应提供恒定的默认初始值设定项值
如果在没有
之前对初始化入口点的调用。)
一般来说,使用使用全局共享状态的函数并不是一个好主意。这组函数具有将其状态作为函数参数接收的替代项。
如果不调用这些初始化函数中的任何一个,则使用括号中的短语。它基本上说内部状态应该用默认值初始化。这不等于用特定参数调用drand48()
,因为该函数将低位设置为固定值lrand48()
。它可能相当于调用mrand48()
,但这还不完全清楚。术语常量默认初始值设定项值可能意味着每个实现都提供其默认值,或者应该使用C的默认初始值设定项(all bitsrand48
)。