Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 29, 2015 11:51:45

vihard
Зарегистрирован: 2015-06-29
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка: OverflowError: long int too large to convert to float

Привет всем!
Есть код:

# -*- 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

В чем проблема?

Отредактировано vihard (Июнь 29, 2015 11:53:11)

Офлайн

#2 Июнь 29, 2015 12:07:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Ошибка: OverflowError: long int too large to convert to float

гуглится за семь секунд
например



Офлайн

#3 Июнь 29, 2015 12:14:43

vihard
Зарегистрирован: 2015-06-29
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка: OverflowError: long int too large to convert to float

Спасибо, я в курсе, но хотелось бы объяснения на родном языке)

Офлайн

#4 Июнь 29, 2015 12:31:20

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Ошибка: OverflowError: long int too large to convert to float

во 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
в него уже не помещается



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано PooH (Июнь 29, 2015 12:31:53)

Офлайн

#5 Июнь 29, 2015 12:58:16

vihard
Зарегистрирован: 2015-06-29
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка: OverflowError: long int too large to convert to float

PooH
во float помещаются числа в диапазоне

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

Офлайн

#6 Июнь 29, 2015 12:59:55

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9833
Репутация: +  853  -
Профиль   Отправить e-mail  

Ошибка: OverflowError: long int too large to convert to float

vihard
В чем проблема?
Скорее всего, выбран неверный алгоритм.

vihard
el = 1 - x**n / math.factorial(znam)
Деление на факториал вызывает подозрения.



Офлайн

#7 Июнь 29, 2015 13:03:11

vihard
Зарегистрирован: 2015-06-29
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка: OverflowError: long int too large to convert to float

py.user.next
Ошибка возникает даже если в знаменателе поставить просто переменную znam

Офлайн

#8 Июнь 29, 2015 13:30:30

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Ошибка: OverflowError: long int too large to convert to float

это часом не косинус через ряд Тейлора должно считать?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#9 Июнь 29, 2015 13:31:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9833
Репутация: +  853  -
Профиль   Отправить e-mail  

Ошибка: OverflowError: long int too large to convert to float

vihard
Ошибка возникает даже если в знаменателе поставить просто переменную znam
Задание напиши. Может быть неправильным не только алгоритм, но и код реализации неправильного алгоритма.



Офлайн

#10 Июнь 29, 2015 14:00:45

vihard
Зарегистрирован: 2015-06-29
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка: OverflowError: long int too large to convert to float

py.user.next
Вычислить с точностью 0.001:

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version