在StackOverflow看到一个问题,
即从一个列表中取出一个数,如果这个数小于0,则循环加1.5,直到它大于0。抛去上述代码中的错误不说,有个大神给了代码,其中一行是:
y[i] %= 1.5
做了几个测试:
可以看出结果是对的,but why?
去查负数求模,看到这个,https://blog.csdn.net/hk2291976/article/details/52775299
可知,在Python中,对于给定的数a,对q取余数r,令
有
当n为负数时向下取整的绝对值要比为正数时大一,如 1.2向下取整为1,-1.2向下取整为2。
而前面对一个负数加1.5直到大于0,相当于做了
以 -4 为例,结果 x = -4 + 1.5 + 1.5 + 1.5 = -4 + 3 * 1.5 = -4 + (4//1.5 + 1) * 1.5 = -4 - (-4//1.5)*1.5, (整除都是向下取整)
结论:对一个负数a循环加q直到a非负时,可以直接令 a = a % q
叙述有点乱