2024 年 Clojure 状态调查 中分享您的想法!

欢迎!请参阅 关于页面 了解更多关于如何进行此操作的信息。

0
ClojureScript

负数的解决方案(https://dev.clojure.org/jira/browse/CLJS-417)导致了浮点数的令人尴尬的行为

(mod 2.1 3) ; => 2.0999999999999996

Clojure 和标准 JavaScript 的模运算在这里都返回预期的 2.1。

两种可能的解决方案

  • 仅在除数实际为负数时才进行 double-mod 解决方案
  • 检查被除数是否小于除数,并在该情况下直接返回它

9 个回答

0

评论者:dnolen

补丁欢迎。

0

评论者:zto

该补丁将 cljs.core/mod 重命名为 double-mod 并重新定义 mod,直接在两个参数具有相同符号时调用 js-mod。
它包含之前失败的测试用例,但我还更全面地测试了与 Clojure 实现的对比: https://gist.github.com/aw7/a32bd69923c65bddc23fd63ee062833c

0

评论者:dnolen

非常感谢,您提交了您的Clojure CA吗?

0

评论者:zto

是的,两小时前。

0

评论者为:anmonteiro

注意:难道不应该将double-mod函数标记为私有吗?

0

评论者:zto

我认为没有必要单独存在double-mod函数,我已经添加了一个补丁,其中将它内联到mod中。

0
_评论者:mfikes_

André,ClojureScript需要压缩补丁(CLJS-2319-Fix-cljs.core-mod-handling-of-floats_INLINED.patch中有两个补丁)。请参见https://script.clojure.org/community/patches
0

评论者:mfikes

叹气... 补丁中的某些内容在Travis上运行的旧版JavaScriptCore的测试中破坏了。我唯一的猜测是额外的mod测试可能触发了CLJS-910,但这似乎不太可能。

0
...