python-3.x 如何将symy.Float转换为decimal.Decimal而不设陷阱?

kuuvgm7e  于 2023-03-31  发布在  Python
关注(0)|答案(2)|浏览(142)

考虑下面的表达式

(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

并且如果在其间使用浮点函数,

Decimal(float( (sp.Float(3000)**20000)**20000))

该值将被错误地转换为

Decimal('Infinity')

因为这个数字超过了浮动的限制。
如何将symy.Float转换为decimal.Decimal而不设陷阱?

piwo6bdm

piwo6bdm1#

你可以通过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')
hivapdat

hivapdat2#

您可以为Decimal数字设置所需的精度,如

>>> from decimal import *
>>> getcontext().prec = 100 # can't be bigger than MAX_PREC
>>> MAX_PREC
425000000

你的指数大于MAX_PREC,所以你不能用Decimal来表示它,除非你能让MAX_PREC更大。你有没有考虑过存储你的数字的对数而不是数字本身?

相关问题