在调用下面定义的函数biased_random时,如何防止错误?参数scale
和bias
的限制是为了防止大数或小数问题?
def biased_random(scale, bias):
return random.random() ** bias * scale
>>> sum(biased_random(1000, 10) for x in range(100)) / 100
64.94178302276364
>>> sum(biased_random(1000, 100000) for x in range(100)) / 100
0.0
>>> sum(biased_random(1000, 0.002) for x in range(100)) / 100
998.0704866851909
答案 0 :(得分:1)
我会使用sys.maxint
来确定溢出点是什么。然后除以它或将其与你的数字进行比较:
r = random.random()
if sys.maxint ** (1.0/bias) < r:
print "overflow imminent"
elif sys.maxint/float(scale) < r ** bias:
print "overflow imminent"
else:
print "overflow unlikely. To infinity, and beyond..."
希望这有帮助