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 评论:

是的,两小时前。

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
...