首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python数值计算关注

Python数值计算关注
EN

Stack Overflow用户
提问于 2014-05-07 21:41:16
回答 4查看 77关注 0票数 3

我在python中计算了以下两个值,得到了不同的结果!如果有人能推理出为什么会发生这样的事情,那就太好了。

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

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-05-07 21:47:03

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

代码语言:javascript
复制
>>> -3/(-2)
1

>>> -3/2*-1
2

1.5被舍入到1-1.5被舍入到-2。在某种程度上是一致的。

参考文件:

普通整数除法或长整数除法产生相同类型的整数;结果是数学除法的结果,并对结果应用“地板”函数。

如果要在Python2.x中使用浮点结果,则需要显式转换(或只使用浮点数)或执行from __future__ import division。在Python3.x中,除法总是生成浮点(参考)。

票数 5
EN

Stack Overflow用户

发布于 2014-05-07 21:50:06

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

代码语言:javascript
复制
>>> (111 - (111 + 2*17)*3375)/(14.)*(-1)
34947.42857142857
>>> (111 - (111 + 2*17)*3375)/(-14.)
34947.42857142857
票数 1
EN

Stack Overflow用户

发布于 2014-05-07 21:56:41

这取决于python处理整数除法的方式。

如果你的除法的分子(顶部)或除数(底部)是负的,那么python就会舍弃零。要使自己相信这一点,一个简单的方法是比较两个简单的分数:25/625/(-6)。它们将分别产生4和-5。

为了得到同样的结果,我们可以用一个浮点数( 14.0 )来转换为浮点算术。

如果您对更多的数学感兴趣,这似乎是一篇很好的文章:http://python-history.blogspot.co.nz/2010/08/why-pythons-integer-division-floors.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23528991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档