如何知道我是否正在失去代数运算的精度?

时间:2017-05-21 03:10:08

标签: python largenumber

大家......我在ubuntu OS上使用python 3。 代数运算有一个限制吗?例如,我使用的表达式总结了几个因素的乘积。实施例

      -  19 * a[15] * a[16]**5 
    -  19 * a[15] * a[18]**15 
    +  114 * a[15]**2 * a[18]**11 
    -  228 * a[15]**3 * a[18]**7 
    +  19 * a[15]**4 * a[16] 
    +  95 * a[15]**4 * a[18]**3 
    +  19 * a[16] * a[17]**8 
    + ... 

显然,整个表达式使用名为“a”的列表中的每个元素。

其中

a = [402481529333452799737856, 584701242576216277385216, 381624405337102891352064, 149810598966570642309120, 39872669983907831087104, 7677351509657277956096, 1112790794949098209280, 124591361265902845952, 10959810498173202432, 765616198595219328, 42719502536872064, 1906692221880063, 67880221932168, 1912942704676, 42095054406, 707502567, 8765436, 75402, 402]

我不知道我是否正在失去预测,我的预期反应(基于理论)是3667707174836348186431483911144而获得的是3667707189516889659417305507748,因为你注意到差异非常小(相反与中间操作中的数字的大小),因此我认为我在计算任务中失去了精确性。 我不能提供这么多信息..我道歉。 所以问题是......在纯蟒蛇中可能会失去精确度;如果我使用不同的大数字,受基础操作(加法,减法,产品等)的影响?

1 个答案:

答案 0 :(得分:1)

如果你完全用整数操作,那么不,你不会失去精确度。

如果您的代数运算只是在有理数上,并且您避免使用数字的根,那么您可以使用fractions模块并避免精度损失。

否则,除非您将操作结构化为上述两种情况之一,否则您将失去精确度。