负数取模

(-7)%10 = ?

有两个答案:-73

这就要说到编程语言对于模运算的定义

r = a - (a / b) * b

这其中对于除法运算 a / b 有两种不同的取整方式,一种是向 0 取整,一种是向负无穷取整。这就导致了取模会有两种结果。

例如:

-7/10 向 0 取整,得到的结果是 0,如果向负无穷取整得到的结果是 -1。因此,如果采用向 0 取整的方式,-7%10 结果就是 -7,如果向负无穷取整,得到的结果就是 3。

到底是向 0 取整还是向负无穷取整,不同的语言实现方式不同,通常默认是按照向 0 取整来计算的,Python 是按照向负无穷取整来计算的,部分语言干脆提供两个函数,rem 和 mod。

有时候确实需要使用向负无穷取整这种方式怎么办呢。可以通过 floor 函数来计算,该函数是向下取整。那么取模变为如下方式:

r = a - floor(a / b) * b

Read More

计算机浮点数那些事

十进制小数转二进制小数

对十进制小数乘2得到的整数部分和小数部分,整数部分既是相应的二进制数码;
再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分;
如此不断重复,直到小数部分为0或达到精度要求为止。
第一次所得到为最高位,最后一次得到为最低位。

Read More