在 sympy 中考虑以下表达式
(sp.Float(3000)**20000)**20000
或者,等价地,十进制,
(Decimal(3000)**20000)**20000
大约是
Decimal('7.72440390834123481997707091832E+1390848501')
但是不支持sympy.Float和decimal.Decimal之间的转换
Decimal((sp.Float(3000)**20000)**20000)
TypeError: conversion from Float to Decimal is not supported
如果在两者之间使用 float 函数,
Decimal(float( (sp.Float(3000)**20000)**20000))
该值将被错误地转换为
Decimal('Infinity')
因为数字大于浮动的限制。
如何在没有陷阱的情况下将 sympy.Float 转换为 decimal.Decimal?
你可以通过str转换:
In [6]: from decimal import Decimal
In [7]: from sympy import Float
In [8]: f = (Float(3000)**20000)**20000
In [9]: Decimal(str(f))
Out[9]: Decimal('7.72440390834144E+1390848501')
您可以为 Decimal 数字设置所需的精度,例如
>>> from decimal import *
>>> getcontext().prec = 100 # can't be bigger than MAX_PREC
>>> MAX_PREC
425000000
您的指数大于 MAX_PREC,因此除非您可以使 MAX_PREC 更大,否则您将无法用 Decimal 表示它。您是否考虑过存储数字的对数而不是数字本身?