Top.Mail.Ru
Ответы

Int too large to convert to float

Import math


def f(x):
a = 2
for i in range(1, 2 + 3 * x + x * x + 1):
a *= 2
return a


c = -1
for x in range(-100, 100):
for y in range(-1, 4):
a = int(3 ** (y + 3) + 0.5) * int(f(x) + 0.5) - int(math.log(3, 2) + 0.5)
b = 3 * math.sqrt(3 - y)
if a == 3 and b <= 6 - abs(y + 1):
c = max(c, x + y)
print(c)

на что получаю :
a = int(3 ** (y + 3) + 0.5) * int(f(x) + 0.5) - int(math.log(3, 2) + 0.5)
OverflowError: int too large to convert to float

Помогите пж, как можно тут выкрутиться

По дате
По рейтингу
Аватар пользователя
Новичок

Убрать int или навесить на результат разницы, а не на каждое слагаемое, если результат разницы приемлемый

Аватар пользователя
Высший разум

Ну вот, смотри:
при x = 99 значение f(99) равно 2 ** 10100.
Но максимальное вещественное число, которое можно записать в формате с двойной точностью, равно 2 ** 1023.
Вот тебе и сообщают об ошибке: не влезает слишком большой целый результат f(x) в границы вещественного числа - когда ты к f(x) прибавялешь 0.5.

Просто замени int(f(x) + 0.5) на f(x) - у тебя же f(x) ВСЕГДА возвращает целое положительное значение и f(x) математически равно int(f(x) + 0.5).

И, кстати, с int(3 ** (y + 3) + 0.5) та же самая фигня: при заданном диапазоне y достаточно написать: 3 ** (y + 3) - без бессмысленных преобразований целого 3 ** (y + 3) сначала в вещественное, а потом в точно такое же целое.