Я новичок в Python, я читал эту страницу, где я увидел странное утверждение:
if n+1 == n: # catch a value like 1e300
raise OverflowError("n too large")
х равно числу больше его ?! Я чувствую волнение в Силе.
Я знаю, что в Python 3 целые числа не имеют фиксированной длины в байтах. Таким образом, нет целочисленного переполнения, например, как работает C's int
. Но, конечно, память не может хранить бесконечные данные.
Я думаю, поэтому результат n+1
может быть таким же, как n
: Python не может выделить больше памяти для предварительного суммирования, поэтому он пропускается, и n == n
имеет значение true. Это правильно?
Если это так, это может привести к неверному результату программы. Почему бы Python не вызвать ошибку, когда операции невозможны, как в C ++ std::bad_alloc
?
Даже если n
не слишком велик и проверка оценивается как ложное, result
- из-за умножения - потребуется гораздо больше байтов. Может ли result *= factor
потерпеть неудачу по той же причине?
Я нашел это в официальной документации Python. Действительно ли это правильный способ проверить "переполнение" больших целых / возможных целых чисел?