如何用浮点数除大数?

2024-06-12 04:17:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些大的数字(比如总共10000000个数字或更多)。因为我会失去精度,所以它们像字符串一样存储。 以一些“小”数字为例(有些数字也可以是整数):

a = 4782916578987656789087654678908765467417657489104.9486718490129876578
b = 657890876566567890.8765467890987654

我想对他们做些手术。你知道吗

除法。答案是7.270075858095143e+30

多重性:3.1466371806949598e+66 等等。你知道吗

理想的输出是作为字符串的完整数字,但对于带有分段零和余数的浮点,其精度是给定的。你知道吗

示例:
888888888888.23 / 2.5122217 == 353825814373.082590504959329565857965
(点后24位)`

我试过decimals模块,但它不能处理大整数:class 'decimal.DivisionImpossible或者其他我不知道的东西。你知道吗

有没有一种方法可以使用标准库,或者至少是numpy。或者某种算法,我也可以用JavaScript之类的其他语言重现?你知道吗

注意:我知道我可以使Decimal.getcontext().prec = 8888888888888或更大,但这将需要更多的时间来计算,如果数字是1和1.7373我需要浪费资源吗?而且它是整数的精度,而不仅仅是浮点数。你知道吗


Tags: 模块字符串答案示例精度数字整数class
1条回答
网友
1楼 · 发布于 2024-06-12 04:17:40

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}')

既然你想玩大的,大的数字,那么,你就有了。你知道吗

另外,我想用10 000 000数字来写一个数字,但是我的文本编辑器不允许这样。。。它们冻结了。你知道吗

相关问题 更多 >