我想要一个函数(如果相关的话,可以使用Python 3.6+),它将以以下方式将浮点数随机舍入为整数:
给定一个实数,x
,leta = floor(x)
和letb = ceil(x)
。然后,编写一个函数s_int()
,该函数将以b - x
的概率返回a
,并以x - a
的概率返回b
例如,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})
以下是我的问题:
还有其他更简单或更优雅的解决方案吗
可以让它跑得更快吗
相关问题 更多 >
编程相关推荐