首页 > 解决方案 > 为什么 -inf 当计算表达式是受控的

问题描述

我正在使用变量值进行计算:

b=49277625229919252619702799653707265870395898977145078030839752

n=22112825529529666435281085255026230927612089502470015394413748319128822941402001986512729726569746599085900330031400051170742204560859276357953757185954298838958709229238491006703034124620545784566413664540684214361293017694020846391065875914794251435144458199

c=-3.2029790664620333e+67

我正在计算的值是:

B = (b + (n - b*b) * c)

这不应该返回-inf,因为我不受内存空间的限制(我有超过 10 场演出,我正在这样做)。

这个问题可以解决吗?

编辑:我也想知道发生这种情况的原因,这样我就可以避免未来的不幸。

标签: pythonpython-3.xlargenumberinfinity

解决方案


您的操作返回-inf,因为它超出了float. 您可以使用sys.float_info.max检查实现支持的最大浮点值。一般这个值是1.7976931348623157e+308。因此,超过此限制的数字将表示为float('inf')正数或float('-inf')负数。

现在,为了解决您的问题,您可以使用decimalpython 中的内置库。

试试这个:

from decimal import Decimal

b = Decimal(b)
n = Decimal(n)
c = Decimal(c)

B = (b + (n - b*b) * c)
print(B)

输出:

-7.082691727141074913216311547E+326

推荐阅读