什么是drand48()C中的默认种子?

时间:2018-06-12 12:47:41

标签: c posix default seed

我想知道drand48()的默认种子是什么,即如果我在调用srand48()之前没有明确使用drand48()

我检查了 glibc 2.23 的源代码(我目前正在使用的版本),我认为它是零,但如果有人可以验证它,那就太好了。

1 个答案:

答案 0 :(得分:2)

POSIX没有特定的值,相反它说应该调用其中一个初始化函数:

  

srand48()seed48()lcong48()函数是初始化   入口点,其中一个应在drand48()之前调用,   调用lrand48()mrand48()。 (虽然不推荐   练习时,应提供常量默认初始化值   如果没有调用drand48()lrand48()mrand48(),则自动生效   事先调用初始化入口点。)

更一般地说,使用使用全局共享状态的函数并不是一个好主意。这组函数具有将其状态作为函数参数接收的替代函数。

如果你没有调用任何这些初始化函数,你可以使用括号中的短语。它基本上说应该使用默认值初始化内部状态。这不等同于使用特定参数调用srand48,因为该函数将低阶位设置为固定值0x330。它可能等同于对seed48(0, 0, 0)的调用,但这并不完全清楚。术语常量默认初始化值可能意味着每个实现提供其默认值,或者应使用C的默认初始值设定项(所有位0)。