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(将数字四舍五入到最接近的整数)。

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

9 个回答

0

评论者为:favila

在我更新的 {{rem}} 中找到了更好的测试,它应该保持原样(毕竟并非简单等同于 js-mod!看起来它在进行参数四舍五入?规范中并不明显)。然而 quot 更正确并引入了比当前版本更少的错误。我将有机会时更新补丁和测试。

0

评论者为:favila

带有测试的运作补丁。测试扩展以覆盖浮点数情况。{{rem}}现在与 master 基本相同(比 js-mod 更准确!!),但对于非有限参数或零除数返回与 js-mod 一致的结果。

0

评论人:mfikes

cljs-1164.patch 已不再适用主分支

0

评论人:arichiardi

修复已应用。我只用 Nashorn 测试了

`

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

...

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

0

评论人:arichiardi

修复已清理

0

评论人:mfikes

成功地在 V8、SpiderMonkey、JavaScriptCore 和 Nashorn 单元测试中运行了 Andrea 对 Francis 修复的更新。

我还手动运行了使用修复补丁构建的自引导 ClojureScript 的一些单元测试。

LGTM.

0

评论人:mfikes

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

0

评论人:mfikes

CLJS-1164-1.patch 已不再适用于主分支

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