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

时间:2017-11-21 17:22:36

标签: python python-3.x precision

想象一下我有

>>> a = 725692137865927813642341235.00

如果我这样做

>>> sum = a + 1

之后

>>> sum == a
True

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

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

PS: a np.float64

3 个答案:

答案 0 :(得分:2)

如果a必须具体为float类型,否则不可能。{p>事实上,不精确性要大得多:

>>> 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精度;如果你想保留它,你应该将完整值传递给一个字符串。)

答案 1 :(得分:2)

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()方法 - 你的求解器会在精确和未降级的收敛水平上进入另一个联盟。

答案 2 :(得分:0)

将a除以100,000然后加1然后再次将其重新计算? 例如

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