如何知道我是否失去了代数运算的精度?
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
模块并避免丢失精度。
否则,您将失去精度,除非您将操作构造为属于上述两种情况之一。
大家...我在 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
模块并避免丢失精度。
否则,您将失去精度,除非您将操作构造为属于上述两种情况之一。