大数python的乘法

Multiplication of large numbers python

提问人: 提问时间:5/12/2023 最后编辑:dan04 更新时间:5/13/2023 访问量:68

问:

我决定将两个数字相乘: 1.0 17299991019999108999910899991119999 结果,我收到了回复: 1.729999101999911e+34

法典:

print(1.0*17299991019999108999910899991119999)
1.729999101999911e+34

在这里,我在计算器上计算了它:enter image description here

为什么 python 计数不正确?

蟒蛇 python-3.x 浮动精度

评论

1赞 bereal 5/12/2023
浮点数的精度有限,请尝试使用 decimal
2赞 pippo1980 5/12/2023
浮点值仅在小数点后第 15 位之前准确
2赞 FrontRanger 5/13/2023
通过打印所有数字,您可以更清楚地看到浮点精度丢失的位置:“{:.4f}”.format(17299991019999108999910899991119999) --> '17299991019999109678504975534129152.0000'
3赞 slothrop 5/13/2023
@Kucer0043问题在于它使用解析器视为浮点的文字(因此精度有限)。您将需要它,以便您从字符串字面量无损构造。在计算之前,您还需要将精度设置得适当高,例如Decimal(17299991019999108999910899991119999.0)Decimal("17299991019999108999910899991119999.0")getcontext().prec = 50
1赞 STerliakov 5/13/2023
你不能创建一个 from float 并期望它是精确的,因为你已经是一个立即失去精度的浮点数......Decimal172...99.0

答:

1赞 dan04 5/13/2023 #1

因为是一个 ,而 Python 算术的规则有 * = 。1.0floatfloatintfloat

如果你想做任何严肃的数学工作,你应该知道,Python 是一个 IEEE 754 双精度数,因此(除了“非正态”)有 53 位(= 15-16 个十进制数字)的精度。数字 17299991019999108999910899991119999 的长度为 114 位,因此被舍入。float

如果需要高精度算术,请使用适当的数据类型而不是 .float

  • int可以精确地表示计算机内存中可以容纳的值。当然,它只适用于整数,所以不能用于小数点后有数字的任何内容。
  • 分数。分数可以精确地表示任何有理数。当然,它不适用于平方根、三角函数和对数等。
  • 十进制。十进制精确表示十进制分数(例如,实际是 0.01 而不是 0.0100000000000000000020816681711721685132943093776702880859375),并且可以将任意实数近似为用户指定的精度(默认为 28 位有效数字)。您仍然会遇到一些舍入错误(例如,1/3 不能准确表示),但比使用 .Decimal('0.01')float