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 和 +/- Infinity 参数)。