drand48() 能返回 1 吗?

标签 c random posix

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):

所以我倾向于相信 [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 应该与间隔中的任何其他数字具有相同的出现概率,因此“它经常返回 0”看起来不正确。检查您的打印是否完全精确。

作为旁注,请注意 dran48 and friends are obsolete

关于drand48() 能返回 1 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53434572/

相关文章:

c - C编译错误中的队列实现

javascript - 在页面上放置一个随机生成器脚本 - 它可以工作。添加另一个具有不同名称的名称 - 不起作用

php - 如何在php中安装posix

linux - 在 shm_open 和 mmap 之间使用 fstat

c - 为什么 strcmp 在此上下文中不返回 0?

c - C 中阶乘的 Z 函数

c - UDP多播接收2^24字节的数据,这应该是不可能的

ruby-on-rails - 使用 will_paginate 对博客文章的随机列表进行分页

java - 如何通过概率选择一个项目?

c - 为什么要为一个 POSIX 函数包含多个 header ?