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

欢迎!请查看关于页面以了解更多相关信息。

0
ClojureScript

对于负数的解决方案(https://dev.clojure.org/jira/browse/CLJS-417)会导致浮点数出现烦人的行为

(mod 2.1 3) ; => 2.0999999999999996

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

两种可能的解决方案

  • 只在实际被除数为负数时才执行双模解决方案
  • 检查被除数是否小于除数,并在那种情况下直接返回它

9 答案

0

由:dnolen发表的评论

欢迎提交补丁。

0

由:zto发表的评论

此补丁将 cljs.core/mod 重命名为 double-mod,并重新定义了 mod,当两个参数符号相同时,直接调用 js-mod。
它包括 previously failing cases 的测试 cases,但我还更全面地与 Clojure 实现: https://gist.github.com/aw7/a32bd69923c65bddc23fd63ee062833c 进行了测试。

0

由:dnolen发表的评论

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

0

由:zto发表的评论

是的,2小时前。

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
参考:[https://clojure.atlassian.net/browse/CLJS-2319](https://clojure.atlassian.net/browse/CLJS-2319)(由zto报告)
...