Ситуация: для научной диссертации по логарифмам мы пишем модуль, который будет возводить в разные степени число Эйлера — число 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])