请在 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 测试通过,尽管可以有一些更好的边缘情况测试(负数或正负无穷大的参数)。

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个测试。
无失败,无错误。
使用4个可能的js目标中的1个进行了测试
`

0

评论者:arichiardi

清理了补丁

0

评论者:mfikes

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

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

通过审查。

0

评论者:mfikes

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

0

评论者:mfikes

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

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