2017-05-21 27 views
0

每个人...我在Ubuntu操作系统上使用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] 

如果我失去precission我不知道,我期望的响应(总部设在理论)是3667707174836348186431483911144,得到的是3667707189516889659417305507748,因为你注意到性差异非常小(在与中间操作中的数字大小形成对比),因此我认为我在计算任务中放松了精确度。 我不能给这么多的信息.​​.我的道歉。 所以问题是......有可能在纯python中失去精度;如果我使用不同的大数字,受基本操作(增加,减少,产品等)的影响?

回答

1

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

如果你的代数运算只是有理数,并且你避免了数字的根源,你可以使用fractions模块,也可以避免失去精度。

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

+0

我相信我使用整数......但是当列表名称为“a”的列表中有少量整数(并且说实话并不比我的例子中给出的要小),在每种情况下,我都会得到相同的数字。 ..表达是由产品和款项构成的,没有其他操作。但整个表达式存储在一个文件中,然后通过使用“eval”的函数读取......这可能是一个问题? – Alexis

+0

@Alexis:Python可以对任何大小的整数进行操作,所以这是使用'eval'的代码的问题。 – Blender

+0

我的歉意,我找到了错误在哪里......错误是与整个过程相关的另一个模块(特别是numpy函数称为poly1d)。换句话说:我的错误在于获取列表的值。没关系。非常感谢!。 – Alexis

相关问题