Что означает ошибка OverflowError: math range error
easy

Что означает ошибка OverflowError: math range error

Это ошибка переполнения из-за математических операций

Ситуация: для научной диссертации по логарифмам мы пишем модуль, который будет возводить в разные степени число Эйлера — число e, которое примерно равно 2,71828. Для этого мы подключаем модуль math, где есть нужная нам команда — math.exp(), которая возводит это число в указанную степень.

Нам нужно выяснить различные значения числа в степени от 1 до 1000, чтобы потом построить график, поэтому пишем такой простой модуль:

# импортируем математический модуль
import math

# список с результатами
results = []
# перебираем числа от 1 до 1000
for i in range(1000):
    # добавляем результат в список
    results.append(math.exp(i))
    # и выводим его на экран
    print(results[i-1])

Но при запуске кода компьютер выдаёт ошибку: 

❌ OverflowError: math range error

Что это значит: компьютер во время расчётов вылез за допустимые границы переменной — ему нужно записать в неё большее значение, чем то, на которое она рассчитана.

Когда встречается: во время математических расчётов, которые приводят к переполнению выделенной для переменной памяти. При этом общий размер оперативной памяти вообще не важен — имеет значение только то, сколько байт компьютер выделил для хранения нашего конкретного значения. Если у вас, например, 32 Гб оперативной памяти, это не поможет решить проблему.

Что делать с ошибкой OverflowError: math range error

Так как это ошибка переполнения, то самая частая причина этой ошибки — попросить компьютер посчитать что-то слишком большое. 

Чтобы исправить ошибку OverflowError: math range error, есть два пути — использовать разные трюки или специальные библиотеки для вычисления больших чисел или уменьшить сами вычисления. Про первый путь поговорим в отдельной статье, а пока сделаем проще: уменьшим диапазон с 1000 до 100 чисел — этого тоже хватит для построения графика:

# импортируем математический модуль
import math

# список с результатами
results = []
# перебираем числа от 1 до 100
for i in range(100):
    # добавляем результат в список
    results.append(math.exp(i))
    # и выводим его на экран
    print(results[i-1])
На этот раз переполнения не произошло и мы получили нужные данные

Художник:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Вам может быть интересно
easy
[anycomment]
Exit mobile version