При использовании sqrt
из библиотеки math
, прежде чем приступить к извлечению квадратного корня, он преобразует значение в число с плавающей запятой.
Если мы вручную попытаемся преобразовать 10**2000
в число с плавающей запятой, это также вызовет ошибку.
>>> float(10**2000)
---------------------------------------------------------------------------
OverflowError Traceback (most recent call last)
<ipython-input-14-6ac81f63106d> in <module>
----> 1 math.sqrt(10**2000)
OverflowError: int too large to convert to float
Если бы мы говорили о большом числе, но с квадратом, равным или меньшим 308, Модуль Decimal
будет работать следующим образом.
>>> from decimal import Decimal
>>> Decimal(math.sqrt(10**308))
Decimal('10000000000000000369475456880582265409809179829842688451922778552150543659347219597216513109705408327446511753687232667314337003349573404171046192448274432')
Однако, поскольку число в квадрате намного больше, чем 308, в данном случае 2000, нужно было бы сделать следующее.
>>> from decimal import Decimal
>>> Decimal(10**2000).sqrt()
Decimal('1.000000000000000000000000000E+1000')
Давайте посмотрим на результат, если кто-то попытается преобразовать Decimal(10**2000)
в число с плавающей запятой.
>>> float(Decimal(10**2000))
inf
Можно также использовать десятичный модуль при работе с факториалами, так как они имеют тенденцию очень быстро увеличиваться.
person
Gonçalo Peres 龚燿禄
schedule
21.01.2021
10^2000
или10**2000
? - person RoadRunner   schedule 17.12.2017