【发布时间】:2015-04-17 20:48:24
【问题描述】:
我有一种方法需要从st 和ed 之间的范围内选择一个随机的floatval,但我只想要包含其中一个端点。 (或者,换句话说,(st, ed] 或 [st, ed)。)我目前的解决方案是:
import random
val = None
st, ed = 0, 360
## In application, what I want is an angle, but I've made it generic as an example.
while not (st <= val < ed): # which of st or ed to reject is up to you.
val = random.uniform(st, ed)
...但是有没有办法(通过参数或符号)告诉random.uniform(或类似的函数)包含或排除一个端点或另一个端点?或许NumPy 有答案?
我知道在具有 13 个精度的浮点范围内获得两个等效值的几率基本上为零,但我想知道是否只是为了更好地理解工具本身。
【问题讨论】:
-
不包括上限
-
@PadraicCunningham 不根据文档:“根据四舍五入获取范围 [a, b) 或 [a, b] 中的随机数”
-
@EllaShar 除非我弄错了,这就是“取决于舍入”的意思;由于浮点运算不精确,对于
a和b的某些值,可以从random.uniform(a, b)获得b。 -
如果考虑到舍入误差,那么
uniform实际上并不统一,是吗? -
另外,一个包含右边界的
uniform调用的显式示例:random.uniform(2.**53, 2.**53+2)
标签: python random set endpoint