请在 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,并在两个参数都有相同符号时直接调用 js-mod 重新定义 mod。
它包括了之前失败的测试用例,但我还更全面地测试了 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
...