drand48()可以返回1吗?

时间:2018-11-22 15:57:06

标签: c random posix

drand48()的手册说:

  

drand48()和erand48()函数返回非负数,   双精度浮点值,均匀分布在   间隔[0.0,1.0]。

source

所以仅作说明:这是否意味着drand48()可以返回1.0?还是意味着返回值将小于1.0?

我问是因为在蛮力测试drand48()中似乎永远不会返回1.0。它通常返回0,但永远不会返回1.0。但是,对我而言,drand48()手册似乎说1.0确实是可能出现的结果,尽管实际上我还无法使drand48()返回1.0。

这里有谁能对此有所启发?结果将始终小于1.0还是等于1.0?

2 个答案:

答案 0 :(得分:6)

“在[0.0,1.0]间隔内。”假定间隔的数学符号是安全的。括号内的间隔端点是排他的,方括号内的间隔端点是包含的。因此,根据表示法,返回值可以为1.0

但是是旧版本的文档,而当前版本将[0.0, 1.0)指定为间隔(这意味着它不能为1.0):

因此,我倾向于相信[0.0, 1.0)是正确的规范。 (可能是自SUS2以来(1997年以来),定义已更改,或者页面上是错字,但我对此没有专门知识,因此我不会赘述)


  在蛮力测试中,

drand48()似乎永远不会返回1.0。经常   返回0,但不返回1.0。

这似乎很可疑。 0.0应该与间隔中的任何其他数字出现的可能性相同,因此“它经常返回0”看起来不太正确。检查打印是否完全精确。

请注意,dran48 and friends are obsolete

答案 1 :(得分:0)

您正在查看一个非常旧的POSIX文档。 drand48的POSIX 2017说:

  

drand48()和erand48()函数应返回非负数,   双精度浮点值,均匀分布在   间隔[0.0,1.0)。

这也与Linux man pages(通常代表glibc实现)保持一致。

同样在POSIX 2001中也会出现。