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 和 ± 无穷大)的一些更好的测试。

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 进行测试

...

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

0

评论者:arichiardi

补丁已清理

0

评论者:mfikes

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

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

LGTM(看起来好)。

0

评论者:mfikes

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

0

评论者:mfikes

修正文件 CLJS-1164-1.patch 已不再适用于 master 分支

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