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。
它包括先前失败的测试用例,但我也对 Clojure 实现进行了更彻底的测试:[查看测试用例](https://gist.github.com/aw7/a32bd69923c65bddc23fd63ee062833c)

0

评论者:dnolen

非常感谢,您是否已提交您的 Clojure CA?

0

评论者:zto

是的,2小时前。

0

评论者:anmonteiro

小插曲:难道不应该将 double-mod 函数标记为私有吗?

0

评论者:zto

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

0
_Comment made by: 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
...