quot 和 rem 函数的实现过于复杂。目前它们是这样的
(defn quot [n d] (fix (/ (- n (js-mod n d)) d))) (defn rem [n d] (- n (* d (quot n d))))
但是 js 中的所有数字已经是双精度浮点数,所以这些都是不必要的
(defn quot [n d] (fix (/ n d))) (defn rem [n d] (js-mod n d)))
注意到 "rem" 只是一个 js-mod,我不确定为什么之前没人注意到。现在我仍然保留 js-mod,因为很多代码都在使用它,并且如果 cljs 以后发展到数字大库,这种区别可能很重要。
附上的补丁包括
- 创建 quot 和 rem 的宏版本。
- 更新 quot、rem、js-mod 和 mod 的文档,以增强可读性。
- 如果有可用的话,通过 ES6 Math.trunc() 实现一个用于四舍五入到零的私有函数 fix。
现有的 quot 和 rem 测试通过,尽管可能会有一些更好的测试来测试边缘情况(负数或非零除数、NaN 和 + - 无穷大参数)。