Python数值计算关注点

Python数值计算关注点,python,python-2.x,Python,Python 2.x,我用python计算了以下2个值,得到了不同的结果!如果有人能解释为什么会这样,那就太好了 (111-(111+2*17)*3375)/(-14)给出34947作为输出 (111-(111+2*17)*3375)/(14)*-1给出34948作为输出 这两个术语在数学上是等价的。这与舍入规则有关。考虑一个更简单的例子: >>> -3/(-2) 1 >>> -3/2*-1 2 1.5向下四舍五入到1,-1.5向下四舍五入到-2。在某种程度上是一致的 普通或

我用python计算了以下2个值,得到了不同的结果!如果有人能解释为什么会这样,那就太好了

(111-(111+2*17)*3375)/(-14)
给出34947作为输出

(111-(111+2*17)*3375)/(14)*-1
给出34948作为输出


这两个术语在数学上是等价的。

这与舍入规则有关。考虑一个更简单的例子:

>>> -3/(-2)
1

>>> -3/2*-1
2
1.5
向下四舍五入到
1
-1.5
向下四舍五入到
-2
。在某种程度上是一致的

普通或长整数除法产生相同类型的整数;这个 结果是使用“地板”功能进行数学分割 应用于结果


如果希望在Python2.x中得到浮点结果,则需要显式转换(或仅使用浮点文字),或者从uuu future\uuuuu导入除法执行
。在Python3.x中,除法总是产生一个浮点()。

您正在进行整数运算,这会根据分数结果是负数还是正数对其进行不同的舍入。使用浮点除法:

>>> (111 - (111 + 2*17)*3375)/(14.)*(-1)
34947.42857142857
>>> (111 - (111 + 2*17)*3375)/(-14.)
34947.42857142857

这归结为python处理整数除法的方式

如果除法的分子(顶部)或除数(底部)为负数,则python将从零取整。让自己相信这一点的一个简单方法是比较两个更简单的分数:
25/6
25/-6
。这些将分别产生4和-5

为了得到相同的结果,您可以使用浮点ie 14.0来转换为浮点算术

如果你对更多的数学感兴趣,这似乎是一篇不错的文章:

如前所述,python的除法和舍入似乎是一个问题 下面是如何修复它

In [10]: int((111 - (111 + 2*17)*3375)/(-14.0))
Out[10]: 34947

In [11]: int((111 - (111 + 2*17)*3375)/(14.0)*-1 )
Out[11]: 34947

请发布您实际输入的内容….
(14)-1
是13…好吧,更准确的说法是,结果总是向负无穷大舍入(不是说负结果和正结果“不同”)。值得注意的是,在Python 3中
/
表示“整数除法”,而
/
表示“浮点除法”@maxywb是的,我会说“地板划分”而只是“划分”(它们在我链接到的文档中被称为FWIW)。两者都存在于Python2中。但是除法在2.x和3.x中的整数上表现不同。