[英]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.