繁体   English   中英

如何在python中将非常大的数字加到1

[英]How to sum very large numbers to 1 in python

所以想象一下

>>> a = 725692137865927813642341235.00

如果我做

>>> sum = a + 1

然后

>>> sum == a
True

这是因为a大于某个阈值。

是否有像logsumexp这样的logsumexp来执行此操作?

PS: a是一个np.float64

如果a必须特别是float类型,否则那是不可能的。 事实上,不精确性要大得多:

>>> a = 725692137865927813642341235.00
>>> a + 10000 == a
True

但是,还有其他数据类型可用于表示(几乎)任意精度的decimal值或fractions

>>> d = decimal.Decimal(a)
>>> d + 1 == d
False
>>> f = fractions.Fraction(a)
>>> f + 1 == f
False

(注意:当然,做Decimal(a)Fraction(a)并不能神奇地恢复已经丢失的a精度;如果你想保留它,你应该将整个值作为字符串传递。)

0) import decimal
1)设置decimal.getcontext() (. .prec属性)的适当精度
2)声明为decimal.Decimal()实例

>>> import decimal
>>> decimal.getcontext().prec
28
>>> decimal.getcontext().prec = 300
>>> dec_a = decimal.Decimal( '725692137865927813642341235.0' )

很高兴使用十进制模块进行极其扩展的数值精度求解器。


奖金:

十进制模块具有非常强大的上下文方法,它们保留decimal模块的强度.add() .subtract() .multiply() .fma() .power() ,以确保构建几乎无限的精度求解方法......

绝对值得掌握这些decimal.getcontext()方法 - 你的求解器在精确和未降级的收敛水平上进入另一个联盟。

将a除以100,000然后再加1然后再次重新启动? 例如。

a=725692137865927813642341235.00
a /= 100000
a += 0.00001
a *= 100000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM