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))))

然而,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(四舍五入到 0)。

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

9 个答案

0

评论者:favila

更新的 {{rem}} 中找到了更好的测试,它应该保持原样。(终究不是简单的 js-mod!似乎会先对参数进行舍入?规范中并不明显。)但是 quot 更正确,引入的错误比当前版本更少。有机会时我会更新补丁和测试。

0

评论者:favila

包含测试的修复补丁。测试已扩展以涵盖浮点数情况。{{rem}} 现在与主分支基本相同(之前比 js-mod 更准确!!),但返回与 js-mod 共同的结果,对于非无穷大参数或零除数。

0
已回答

评论者:mfikes

cljs-1164.patch 在master分支上不再适用

0

评论者:arichiardi

补丁现在适用。我只用Nashorn进行测试

`

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

...

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

0

评论者:arichiardi

补丁清理完成

0

评论者:mfikes

通过V8、SpiderMonkey、JavaScriptCore和Nashorn单元测试成功运行了Andrea对Francis补丁的更新。

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

看起来不错。

0

评论者:mfikes

由于这是一个低级的数字更新,我还通过ChackraCore运行了单元测试(成功)。

0

评论者:mfikes

CLJS-1164-1.patch 不再适用于master

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