python的取整和取余_是 C++和 python2.7 的取整规则导致了他们的余数不一样吗?

本文讨论了欧几里得带余除法在C++和Python中的不同实现,以及它们取整规则的区别。C++倾向于0取整,Python2.7则向负无穷取整,Py3处理为浮点。作者提问了取整规则与余数选择的关系,并探寻Python早期设定的原因,同时提及其他编程语言如JS和PHP的情况。

最近看书遇到这个问题,查了些资料上 SO 问了一下被 marked duplicated 了。(T_T)来问下前辈们。

先说下我的理解和观察到的现象:

首先我们日常说的带余除法用的是欧几里得带余除法,在 C++和 python 里面都不是这种。

C++里面 m%n 的符号跟 m 相同,python 里面 m%n 符号跟 n 相同。我一开始觉得只是不同 implementation 而已,然后发现好像跟取整的规则有点联系。

py2.7 里似乎是向负无穷取整的

-21/4 == -6

-(21/4) == -5

-21/4 == -(21/4) //False

因为既然定义了 int,那除不尽的时候肯定要设定一个取整规则,那 C++是向 0 取整的,py2.7 似乎是是向负无穷取整的,py3 结果是浮点数没有这个问题。

我的问题是:

1.取整规则跟余数的选择不同是不是一个因果关系?

2.假设 1 成立(其实我心里已经默认是了 T-T ),接着问为什么 py2.7 要搞这个向负无穷取整,搞得-21/4==-(21/4)都不相等了,书上还说

C++语言的早起版本允许结果为负值的商向下或向上取整。 (为什么一开始会是这种设定?)

(看了下 js,没有这个问题,跟 py3 一样是浮点数,但 js 跟 C++一样余数也是跟被除数符号一样的,php 也是)。

stackoverflow 链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值