The drand48() and erand48() functions return non-negative,
double-precision, floating-point values, uniformly distributed over
the interval [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?
“超过间隔[0.0,1.0].”假设间隔的数学符号是安全的.括号间隔结束是排他性的,方括号间隔结束是包含的.因此根据符号,返回值可以是1.0.但是这是旧版本的文档,当前的版本指定[0.0,1.0]作为间隔(这意味着它不能是1.0):
>SingleUNIX®规范,版本2 http://pubs.opengroup.org/onlinepubs/7908799/xsh/drand48.html
列表[0.0,1.0]
>而
> Open Group Base Specifications Issue 7,2018 edition
http://pubs.opengroup.org/onlinepubs/9699919799/functions/drand48.html
> Linux手册页 – POSIX.1-2001
https://www.systutorials.com/docs/linux/man/3-drand48/
> Linux手册页 – POSIX.1-2001.
https://linux.die.net/man/3/erand48
所有列表[0.0,1.0)
所以我倾向于相信[0.0,1.0]是正确的规范. (可能是因为SUS2是自1997年以来的定义发生了变化,或者是页面上的拼写错误,但我没有这方面的专业知识所以我不会权衡)
in a brute force test drand48() never seems to return 1.0. It often
returns 0, but never 1.0.
这似乎非常可疑. 0.0应该与区间中的任何其他数字具有相同的概率,因此“它经常返回0”看起来不正确.检查您是否完全精确打印.
作为旁注,请注意dran48 and friends are obsolete