我有一些数字(例如总计 10000000 个数字或更多)。由于我会失去精度,它们像 strings 一样存储。 让我们以一些“小”数字为例(一些数字也可以是整数):
a = 4782916578987656789087654678908765467417657489104.9486718490129876578
b = 657890876566567890.8765467890987654
我想对它们进行一些操作。
部门。好吧,答案是7.270075858095143e+30
乘积: 3.1466371806949598e+66
依此类推。
理想的输出是 全数字作为字符串 ,但是具有给定精度,用于浮点数转换为零和休止符。
示例:
888888888888.23 / 2.5122217 == 353825814373.082590504959329565857965
(“点”后的24位数字)
我已经尝试过 decimals
模块,但是它不能处理大整数:class 'decimal.DivisionImpossible
以及其他我不知道的东西。
有没有一种方法可以使用 standard 库,或者至少使用numpy
库。也许还有一些算法,我还可以用其他语言(如JavaScript)重现?
注意:我知道我可以使Decimal.getcontext().prec = 8888888888888
或更大,但是计算将花费更多时间,如果数字分别为1和1.7373,我需要在上面浪费资源吗?而且,它不仅不用于“浮点”数字,而且还用于整数的精度。
答案 0 :(得分:1)
decimal
模块是您的朋友。如果您想疯狂,那么...
import decimal
from decimal import Decimal
import sys
c = decimal.getcontext()
c.prec = 899_999_768
c.Emax = decimal.MAX_EMAX
c.Emin = decimal.MIN_EMIN
a = Decimal('149846549e500000')
b = Decimal('254984984e449')
d = a / b
f = a * b
请记住,c.prec
为您提供了打印时所显示的位数。根据文档,最大数量为999999999999999999
,并且您必须绑定到计算机的内存中。以我的情况(实际上是我的计算机)来说,c.prec
是一个很好的数字,可以防止计算机崩溃。
如果打印结果,会发生什么?
print(f'{d}')
print(f'{f}')
既然你想和很多人一起玩,那么就在那里。
P.S。我试图用10 000 000
位数字写数字,但是我的文本编辑器不允许...它们冻结。