请在 2024 Clojure状态调查! 分享您的想法。

欢迎!请参阅 关于 页面以获取更多关于如何使用本站的信息。

0
ClojureScript

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 ever grows a number tower the distinction may be important.

附加了补丁,它还

  • 创建了一个 quot 和 rem 的宏版本。
  • 更新了 quot、rem、js-mod 和 mod 的文档以使内容清晰。
  • 使用 ES6 Math.trunc() 实现一个名为 fix 的函数(一个私有函数,用于四舍五入到 0),如果可供使用。

现有的 quot 和 rem 测试通过,尽管边缘情况可能有更好的测试(例如负小数或除数、NaN 和 ±Infinity 参数)。

9 答案

0

由: favila 评论

在 updated {{rem}} 中发现更好的测试,注意到四舍五入错误,它应该保持原样。 (毕竟不是简单的 js-mod!看起来它会先对参数进行四舍五入?规范中并不明显。) 但是 quot 是正确的,并且引入的错误比现有的更少。有机会时我将更新补丁和测试。

0

由: favila 评论

包含测试的补丁已准备就绪。测试已扩展以涵盖浮点数案例。 {{rem}} 现在基本上与 master 相同(原来是比 js-mod 更精确!),但对于非有限参数或 0 除数返回与 js-mod 一致的结果。

0

评论由:mfikes发表

与主干不兼容:cljs-1164.patch

0

评论由:arichiardi发表

补丁已应用。我仅在Nashorn上进行了测试

`

未设置V8_HOME,跳过V8测试
未设置SPIDERMONKEY_HOME,跳过SpiderMonkey测试
未设置JSC_HOME,跳过JavaScriptCore测试
使用Nashorn进行测试

...

运行了185个测试,包含17195个断言。
无失败,无错误。
测试了4个可能的js目标中的一个
`

0

评论由:arichiardi发表

补丁已清理

0

评论由:mfikes发表

成功在V8、SpiderMonkey、JavaScriptCore、和Nashorn单元测试中运行了Andrea的更新

我还手动运行了通过补丁构建的自引导ClojureScript的一些单元测试。

LGTM.

0

评论由:mfikes发表

由于这是一个底层数值更新,还通过ChackraCore运行了单元测试(成功)。

0

评论由:mfikes发表

CLJS-1164-1.patch不再适用于主干

0
参考资料:https://clojure.atlassian.net/browse/CLJS-1164(由favila报告)
...