请在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_

安德烈,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
答者:
参考: https://clojure.atlassian.net/browse/CLJS-2319 (由 zto 报告)
...