2016/10/8 Haskell

    今天看书,遇到一个挺有意思的东西是之前没有留意的,也挺拗口的,先记录下来。

    之前只知道"div"和"mod",它们的作用分别是取整和求余,今天又发现两个类似的关键字,它们分别是'rem'和'quot',作用与"div"和"mod"似乎差不多。其介绍如下图中所示:

    好像看不懂?算了,英文不好,看不太懂,还是自己研究一番。为了更好的说明这两者之间的差别,我引入stackoverflow上的一题

(x ‘quot‘ y)⋆y + (x ‘rem‘ y) == x  
(x ‘div‘  y)⋆y + (x ‘mod‘ y) == x

x = -20;
y = 3

     其具体的计算过程如下:

  (x `quot` y) * y + (x `rem` y)
=> -6 * 3 + (-2)
=> -20

  (x `div` y) * y + (x `mod` y)
=> -7 * 3 + 1
=> -20

     "div"和"quot"的区别是,"div"向下取整(向无穷小),而"quot"则是向零取整(0方向,正数向下,负数向上)。

    "rem"和"mod"的区别则是求余和求膜之间的区别。譬如在这里的(-20)/3,他的结果是(-6.666…),"rem"直接舍去小数为得(-6),其余数为:(-20)-3*(-6)=-2;"mod"则有点区别,它需要先向无穷小(向下)取整得(-7),然后才得到余数:(-20)-3*(-7)=1。


    搞清楚这两点之后,再看看介绍的那个图,什么呀,人家早已经说了?

  [ Haskell ]
知识共享许可协议 本作品由小蝶惊鸿创作,采用知识共享署名 4.0 国际许可协议进行许可,转载时请保留本文署名及链接。