quot 和 rem 函数的实现过于复杂。目前它们是:
(defn quot [n d] (fix (/ (- n (js-mod n d)) d))) (defn rem [n d] (- n (* d (quot n d))))
然而,JavaScript 中的所有数字已经是双精度浮点数了,所以这些都是不必要的
(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(私有函数,用于四舍五入到 0)。
现有 quot 和 rem 测试通过,尽管可以对边缘情况进行一些更好的测试(负数、NaN 和 ±Infinity 参数)。