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

how to know if i am losing precision on algebraic operations?

大家...我在 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,因为您注意到差异非常小(与中间操作中的数字大小形成对比),因此我认为我在计算任务中失去了精度。 我不能提供那么多信息..我很抱歉。 所以问题是......在纯 python 中可能会失去精度;如果我使用不同的大数,受基本操作(加法、减法、乘积等)的影响?

如果您完全使用整数进行运算,那么不会,您不会失去精度。

如果您的代数运算仅针对有理数并且您避免对数取根,则可以使用 fractions 模块并避免丢失精度。

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