我想知道drand48()
的默认种子是什么,即如果我在调用srand48()
之前没有明确使用drand48()
?
我检查了 glibc 2.23 的源代码(我目前正在使用的版本),我认为它是零,但如果有人可以验证它,那就太好了。
答案 0 :(得分:2)
POSIX没有特定的值,相反它说应该调用其中一个初始化函数:
srand48()
,seed48()
和lcong48()
函数是初始化 入口点,其中一个应在drand48()
之前调用, 调用lrand48()
或mrand48()
。 (虽然不推荐 练习时,应提供常量默认初始化值 如果没有调用drand48()
,lrand48()
或mrand48()
,则自动生效 事先调用初始化入口点。)
更一般地说,使用使用全局共享状态的函数并不是一个好主意。这组函数具有将其状态作为函数参数接收的替代函数。
如果你没有调用任何这些初始化函数,你可以使用括号中的短语。它基本上说应该使用默认值初始化内部状态。这不等同于使用特定参数调用srand48
,因为该函数将低阶位设置为固定值0x330
。它可能等同于对seed48(0, 0, 0)
的调用,但这并不完全清楚。术语常量默认初始化值可能意味着每个实现提供其默认值,或者应使用C的默认初始值设定项(所有位0
)。