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 和 + - 无穷大参数)。

9 个答案

0

评论者:favila

在更新的 {{rem}} 中发现更好的测试可以找到四舍五入错误,该函数应保持不变。(并非简单的 js-mod!似乎首先会四舍五入参数?规范中并不明显。)quot 因此是正确的,并且比当前的版本引起更少的错误。我将在我有机会时更新补丁和测试。

0

评论者:favila

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

0

评论者:mfikes

修改文件的匿名引用模板名不再适用于主分支

0

评论者:arichiardi

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

`

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

...

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

0

评论者:arichiardi

清理了补丁

0

评论者:mfikes

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

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

做得好。

0

评论者:mfikes

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

0

评论者:mfikes

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

0
...