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(一个将数值四舍五入到零的私有函数)。
现有的 quot 和 rem 测试通过,尽管可能是针对边缘情况(负数、小数、NaN 和 ± 无穷大)的一些更好的测试。