为什么 -inf 计算表达式时被控制
Why -inf when calculation expression that is controlled
我正在用变量值进行计算:
b=49277625229919252619702799653707265870395898977145078030839752
n=22112825529529666435281085255026230927612089502470015394413748319128822941402001986512729726569746599085900330031400051170742204560859276357953757185954298838958709229238491006703034124620545784566413664540684214361293017694020846391065875914794251435144458199
c=-3.2029790664620333e+67
我正在计算的值是:
B = (b + (n - b*b) * c)
这个 returns -inf
不应该是,因为我不受记忆的限制 space (我有超过 10 个演出,我正在这样做)。
这个问题可以解决吗?
编辑:我也想知道发生这种情况的原因,以免将来发生意外。
您的操作 returns -inf
因为它超出了 float
的限制。您可以使用 sys.float_info.max
检查实现支持的最大浮点值。一般这个值是1.7976931348623157e+308
。因此,超出此限制的数字将表示为 float('inf')
(如果为正)或 float('-inf')
(如果为负)。
现在,为了解决您的问题,您可以使用 python 中的内置 decimal
库。
试试这个:
from decimal import Decimal
b = Decimal(b)
n = Decimal(n)
c = Decimal(c)
B = (b + (n - b*b) * c)
print(B)
输出:
-7.082691727141074913216311547E+326
另一个解决方案可以使用 mpmath 库来完成,它是一个具有任意精度的库
from mpmath import mp, mpf
# set 50 decimal point precision
mp.dps = 50
#...
b=mpf(b)
n=mpf(n)
c=mpf(c)
B = mp((b + (n - b*b) * c))
输出:
mpf('-7.0826917271410749132163115458418859131992983363200556e+326')
My calculator answered -708269172714107481699009991286024451899843951069764894337265485724940929397877002420223612611538343533719511941925009995267129421537088615912195341304356911711190148667675445629255480078613791447051517048459934380810882287658436814218846510469903536007822812720891745018494205080747380297200346292734129604101022854921969160248
我正在用变量值进行计算:
b=49277625229919252619702799653707265870395898977145078030839752
n=22112825529529666435281085255026230927612089502470015394413748319128822941402001986512729726569746599085900330031400051170742204560859276357953757185954298838958709229238491006703034124620545784566413664540684214361293017694020846391065875914794251435144458199
c=-3.2029790664620333e+67
我正在计算的值是:
B = (b + (n - b*b) * c)
这个 returns -inf
不应该是,因为我不受记忆的限制 space (我有超过 10 个演出,我正在这样做)。
这个问题可以解决吗?
编辑:我也想知道发生这种情况的原因,以免将来发生意外。
您的操作 returns -inf
因为它超出了 float
的限制。您可以使用 sys.float_info.max
检查实现支持的最大浮点值。一般这个值是1.7976931348623157e+308
。因此,超出此限制的数字将表示为 float('inf')
(如果为正)或 float('-inf')
(如果为负)。
现在,为了解决您的问题,您可以使用 python 中的内置 decimal
库。
试试这个:
from decimal import Decimal
b = Decimal(b)
n = Decimal(n)
c = Decimal(c)
B = (b + (n - b*b) * c)
print(B)
输出:
-7.082691727141074913216311547E+326
另一个解决方案可以使用 mpmath 库来完成,它是一个具有任意精度的库
from mpmath import mp, mpf
# set 50 decimal point precision
mp.dps = 50
#...
b=mpf(b)
n=mpf(n)
c=mpf(c)
B = mp((b + (n - b*b) * c))
输出:
mpf('-7.0826917271410749132163115458418859131992983363200556e+326')
My calculator answered -708269172714107481699009991286024451899843951069764894337265485724940929397877002420223612611538343533719511941925009995267129421537088615912195341304356911711190148667675445629255480078613791447051517048459934380810882287658436814218846510469903536007822812720891745018494205080747380297200346292734129604101022854921969160248