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 今后发展出一个数字树,这种区分可能很重要。

附上补丁,它还

  • 创建了一个 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 在 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 单元测试的安德烈亚更新弗朗西斯补丁。

我还手动运行了使用补丁构建的自举 ClojureScript 部分的某些单元测试。

LGTM (看起来很好)。

0

评论人:mfikes

由于这是一次低级别数值更新,还通过 ChackraCore 运行了单元测试(成功)。

0

评论人:mfikes

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

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