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?
答案 0 :(得分:6)
“在[0.0,1.0]间隔内。”假定间隔的数学符号是安全的。括号内的间隔端点是排他的,方括号内的间隔端点是包含的。因此,根据表示法,返回值可以为1.0
。
但是是旧版本的文档,而当前版本将[0.0, 1.0)
指定为间隔(这意味着它不能为1.0
):
单一UNIX®规范,版本2 http://pubs.opengroup.org/onlinepubs/7908799/xsh/drand48.html
列出[0.0, 1.0]
同时
Open Group基本规范2018年第7版
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年以来),定义已更改,或者页面上是错字,但我对此没有专门知识,因此我不会赘述)
在蛮力测试中,drand48()似乎永远不会返回1.0。经常 返回0,但不返回1.0。
这似乎很可疑。 0.0
应该与间隔中的任何其他数字出现的可能性相同,因此“它经常返回0”看起来不太正确。检查打印是否完全精确。
答案 1 :(得分:0)
您正在查看一个非常旧的POSIX文档。 drand48的POSIX 2017说:
drand48()和erand48()函数应返回非负数, 双精度浮点值,均匀分布在 间隔[0.0,1.0)。
这也与Linux man pages(通常代表glibc实现)保持一致。
同样在POSIX 2001中也会出现。