当前位置 : 主页 > 编程语言 > c++ >

drand48()能否返回1?

来源:互联网 收集:自由互联 发布时间:2021-06-23
drand48()的手册说: The drand48() and erand48() functions return non-negative, double-precision, floating-point values, uniformly distributed over the interval [0.0 , 1.0]. (source) 所以只是为了澄清:这是否意味着drand48(
drand48()的手册说:

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

网友评论