drand48() 可以 return 1 吗?
Can drand48() ever return 1?
drand48()
的手册说:
The drand48() and erand48() functions return non-negative,
double-precision, floating-point values, uniformly distributed over
the interval [0.0 , 1.0].
(source)
所以澄清一下:这是否意味着 1.0 可以被 drand48()
return 编辑?或者这是否意味着 return 值将小于 1.0?
我问是因为在暴力测试中 drand48()
似乎从来没有 return 1.0。它经常 returns 0,但从不 1.0。不过,对我来说drand48()
的手册好像说1.0确实是可以出来的结果,虽然我在实践中没能做出drand48()
return 1.0。
这里有人可以阐明这一点吗?结果总是小于 1.0 还是也可以等于 1.0?
"over the interval [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]
而
The Open Group 基础规范第 7 期,2018 年版
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)
是正确的规范。 (可能是自 1997 年的 SUS2 以来定义发生了变化,或者它是页面上的错字,但我对此没有专业知识,所以我不会权衡)
in a brute force test drand48() never seems to return 1.0. It often
returns 0, but never 1.0.
这似乎非常可疑。 0.0
应该与间隔中的任何其他数字具有相同的出现概率,因此 "It often returns 0" 看起来不正确。检查您的打印是否完全精确。
请注意 dran48 and friends are obsolete
您正在查看一份非常古老的 POSIX 文档。 drand48 的 POSIX 2017 年说:
The drand48() and erand48() functions shall return non-negative,
double-precision, floating-point values, uniformly distributed over
the interval [0.0,1.0).
这也与Linux man pages一致(通常表示glibc实现)。
在POSIX 2001中也出现了同样的情况。
drand48()
的手册说:
The drand48() and erand48() functions return non-negative, double-precision, floating-point values, uniformly distributed over the interval [0.0 , 1.0].
(source)
所以澄清一下:这是否意味着 1.0 可以被 drand48()
return 编辑?或者这是否意味着 return 值将小于 1.0?
我问是因为在暴力测试中 drand48()
似乎从来没有 return 1.0。它经常 returns 0,但从不 1.0。不过,对我来说drand48()
的手册好像说1.0确实是可以出来的结果,虽然我在实践中没能做出drand48()
return 1.0。
这里有人可以阐明这一点吗?结果总是小于 1.0 还是也可以等于 1.0?
"over the interval [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]
而
The Open Group 基础规范第 7 期,2018 年版
http://pubs.opengroup.org/onlinepubs/9699919799/functions/drand48.htmlLinux 手册页 - 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)
是正确的规范。 (可能是自 1997 年的 SUS2 以来定义发生了变化,或者它是页面上的错字,但我对此没有专业知识,所以我不会权衡)
in a brute force test drand48() never seems to return 1.0. It often returns 0, but never 1.0.
这似乎非常可疑。 0.0
应该与间隔中的任何其他数字具有相同的出现概率,因此 "It often returns 0" 看起来不正确。检查您的打印是否完全精确。
请注意 dran48 and friends are obsolete
您正在查看一份非常古老的 POSIX 文档。 drand48 的 POSIX 2017 年说:
The drand48() and erand48() functions shall return non-negative, double-precision, floating-point values, uniformly distributed over the interval [0.0,1.0).
这也与Linux man pages一致(通常表示glibc实现)。
在POSIX 2001中也出现了同样的情况。