请在 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
评论者:mfikes

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

评论者:mfikes

糟糕...补丁中某个东西杀死了我们在 Travis 上运行的较老的 JavaScriptCore 测试。我的唯一猜测是额外的模测试可能触发了 CLJS-910,但这似乎不太可能。

0
...