Python数值计算关注点
我用python计算了以下2个值,得到了不同的结果!如果有人能解释为什么会这样,那就太好了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。在某种程度上是一致的 普通或
(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中的整数上表现不同。