我想要一个函数(如果相关,请使用Python 3.6+),该函数将以以下方式随机将浮点数舍入为整数:
给出实数x
,让a = floor(x)
并让b = ceil(x)
。然后,编写一个函数s_int()
,该函数将以a
的概率返回b - x
,并以b
的概率返回x - a
。]
例如,s_int(14.8)
应该在20%的时间内返回14
,而在其余80%的时间内返回15
。
这是我的尝试:
import math from random import random def s_int(x): a = math.floor(x) return a + ((x - a) > random())
它似乎适用于我能想到的所有情况:
In [2]: Counter(s_int(14.7) for _ in range(1000000)) Out[2]: Counter({14: 300510, 15: 699490}) In [3]: Counter(s_int(-14.7) for _ in range(1000000)) Out[3]: Counter({-15: 700133, -14: 299867}) In [4]: Counter(s_int(14) for _ in range(1000000)) Out[4]: Counter({14: 1000000}) In [5]: Counter(s_int(-14) for _ in range(1000000)) Out[5]: Counter({-14: 1000000}) In [6]: Counter(s_int(0) for _ in range(1000000)) Out[6]: Counter({0: 1000000})
这是我的问题:
有没有我认为此功能不起作用的边缘情况?
还有其他更简单或更优雅的解决方案吗?
这可以使其运行得更快吗?
我想要一个函数(如果相关,请使用Python 3.6+),该函数将以以下方式随机将浮点数舍入为整数:给定实数x,让a = floor(x)并让b。 ..