Найти - Пользователи
Полная версия: Ошибка: OverflowError: long int too large to convert to float
Начало » Python для новичков » Ошибка: OverflowError: long int too large to convert to float
1 2
vihard
Привет всем!
Есть код:
# -*- coding:cp1251 -*-
import math
eps = 0.001
x = 5.0
rez = x
znam = 2
shag = 2
while True :
    n = znam
    el = 1 - x**n / math.factorial(znam)
    rezNew = rez + el
    if abs( rezNew - rez ) < eps :
        rez = rezNew
        break
    rez = rezNew
    znam += shag
print math.cos(x), rez

Выдает ошибку:
Traceback (most recent call last):
File “Dpython/zad4/z4.2.4.py”, line 13, in <module>
el = 1 - x**n / math.factorial(znam)
OverflowError: long int too large to convert to float

В чем проблема?
FishHook
гуглится за семь секунд
например
vihard
Спасибо, я в курсе, но хотелось бы объяснения на родном языке)
PooH
во float помещаются числа в диапазоне
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
от 2.2250738585072014e-308 до 1.7976931348623157e+308
факториал от 172
In [3]: len(str(math.factorial(172)))
Out[3]: 312
в него уже не помещается
vihard
PooH
во float помещаются числа в диапазоне

Спасибо, PooH, но как эта проблема решается, и конкретно в моем случае? Как я понял, нужно использовать некий метод Decimal? Но каковы правила его использования? Я пробовал по образцу, все равно выдает ошибку.
py.user.next
vihard
В чем проблема?
Скорее всего, выбран неверный алгоритм.

vihard
el = 1 - x**n / math.factorial(znam)
Деление на факториал вызывает подозрения.
vihard
py.user.next
Ошибка возникает даже если в знаменателе поставить просто переменную znam
PooH
это часом не косинус через ряд Тейлора должно считать?
py.user.next
vihard
Ошибка возникает даже если в знаменателе поставить просто переменную znam
Задание напиши. Может быть неправильным не только алгоритм, но и код реализации неправильного алгоритма.
vihard
py.user.next
Вычислить с точностью 0.001:
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB