首页 > 心得笔记 > Python整数除法的正负号·真

Python整数除法的正负号·真

2012年12月17日  5,318 views 发表评论 阅读评论

时隔一天,我才发现之前那篇文章中有一个漏洞,那就是8/-3,按照文中逻辑:

在C中,如果做除法运算后,余数有多个选择(一般最多也就是两个),那么余数应该选择“更靠近0”的那个。

结果应该是商-3余-1。但实际结果是商-2余-2。这个我们可以通过一个简单的C++程序来验证一下:

C系列语言的整数除法

C系列语言的整数除法

所以,昨天这篇文章的全文其实都是错的……虽然分析的很有道理……

真实的情况是这样的:

整数除法,实际上就是在浮点数除法的基础上将商取整的过程。

对于浮点数除法,我们对商没有疑问,8 ÷ -3 = -2.666666…7,C系列和Python等脚本语言的结果是一致的。

但是如何取整呢?

当商为正数的时候,我们也没有疑问,即 整数除法当商为正数时我们将结果向小的的方向取整。所以 8/3的商2而不是3。

当商为负数的时候,C系列语言和Python等脚本语言对取整的方法有不同的看法:

  • C系列:对于C系列语言来说 整数除法当结果为负数时我们将商向靠近0的方向取整。所以8/-3的商是-2,因为-2比-3更靠近0;
  • Python系列:对于Python等脚本语言来说 整数除法当结果为负数时我们将商向靠近-∞的方向取整。所以8/-3的商是-3,因为-3比-2更靠近-∞。

如上,就是C系列语言与Python等脚本语言的整数除法商不一致的原因所在,大家在使用整数除法时一定要注意结果取整的方向。

原来的文章就不再贴了,只把原文链接放在这里,如果有兴趣可以去看下。



声明:未作说明,则本文为代码至上原创。转载务必注明出处
注意:转载须保留全文,如需修改请 联系作者
本文永久地址:http://codeup.org/archives/544


我要分享到:

新浪微博 腾讯微博 人人 Twitter Facebook 网易微博 鲜果 Follow5
分类: 心得笔记 标签: