Предотвращение ошибок переполнения при умножении и включении в Python - PullRequest
0 голосов
/ 22 февраля 2012

Как можно предотвратить ошибки при вызове функции 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

1 Ответ

1 голос
/ 22 февраля 2012

Я бы использовал sys.maxint, чтобы выяснить, что такое точка переполнения. Затем разделите или n-корень его и сравните с числом, которое у вас есть:

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..."

Надеюсь, это поможет

...