Я работаю с очень большими числами (1 000 000 цифр), и мне нужно вычислить их квадратный корень. Кажется, я достиг предела в своем коде.
y = 10**309
x = y**0.5
print(x)
И я получаю эту ошибку:
x = y**0.5
OverflowError: int too large to convert to float
Код работает до 10**308. Но помимо этого он кажется сломанным. Я также проверил это в командной строке. Та же ошибка. Кто-нибудь может мне помочь?
Если это предел Python, есть ли альтернативный метод, который я мог бы использовать?
РЕДАКТИРОВАТЬ: Внесены исправления в код.
math.sqrt
возвращаетinf
для всего, что больше 10^308. - person Holloway   schedule 30.01.2015sqrt
и различные функции вmath
основаны на математической библиотеке C. Эта библиотека обычно обрабатывает только до предела двойного числа C, обычно 64-битного числа с плавающей запятой. 10^308 — это (абсолютный) максимум 64-битного числа с плавающей запятой (в соответствии со стандартом IEEE 754). - person   schedule 30.01.2015gmpy2
— это современное состояние для работы с действительно огромными числами в Python (я предвзят, потому что я создал его предшественникgmpy
, но долгое время не проявлял активности ни в том, ни в другом — нынешние сопровождающие сделали классная работа). Попробуйте! - person Alex Martelli   schedule 30.01.2015gmpy2.isqrt
может вычислить целочисленный квадратный корень из 1 000 0000-значного числа менее чем за 25 мс. - person casevh   schedule 30.01.2015isqrt
вычисляет целочисленный квадратный корень.sqrt
возвращает значение с плавающей запятой с множественной точностью, но вы можете увеличить точность до любого количества бит. - person casevh   schedule 31.01.2015