请在 Clojure 2024 年度调查问卷 中分享您的看法!

欢迎!请访问 关于页面 了解更多关于此功能的信息。

0 投票
Clojure
已关闭

这并不是一个 Clojure 问题,但仅供参考... 我在我的 M1 MacBook Air 上使用 Azul Java 8。

https://www.azul.com/downloads/

结果证明,在这个 JVM 中,java.lang.Math/exp 并不完全准确。特别是构建日志显示

[java] FAIL in (test-exp) (math.clj:74)
[java] expected: (= m/E (m/exp 1))
[java]   actual: (not (= 2.718281828459045 2.7182818284590455))

看起来它在 double 类型的最后一位是错误的。我选择 Azul 是因为它声称是针对 M1 的 ARM 原生版本,但可能有在内置模拟中运行一些英特尔二进制文件的复杂性。不确定到底是什么情况,但我想提到这个不一致性,以防其他人遇到类似情况。我假设问题是 Azul JVM 的一个错误。如果我能找出正确的渠道,我将尝试跟进。

顺便问一下,M1 Mac 上有更好的 ARM Java 版本可以使用吗?

以下是一些我的 System/getProperties 的输出结果

"jdk.vendor.version" "Zulu 8.58.0.13-CA-macos-aarch64",
"sun.management.compiler" "HotSpot 64-Bit Tiered Compilers",
"java.vm.info" "mixed mode",
"java.vendor.url" "http://www.azul.com/",
"java.vm.version" "25.312-b07",
"java.vendor" "Azul Systems, Inc.",
"java.vm.specification.version" "1.8",
"java.runtime.version" "1.8.0_312-b07",
"java.vm.vendor" "Azul Systems, Inc.",
"java.vm.name" "OpenJDK 64-Bit Server VM",
"java.version" "1.8.0_312",
"os.arch" "aarch64",
"java.specification.version" "1.8",
"sun.arch.data.model" "64",
"java.class.version" "52.0",
"os.name" "Mac OS X",
"os.version" "12.1"

已关闭,附注: 在 1.11.0-beta1 中发布

2 答案

0 投票

选定
 
最佳回答

在Math实现中,这种不精确度(1 ulp)是允许的(StrictMath则不同),因此这是可以的,但最好让测试足够宽容以通过。

谢谢您提供有关可接受的ulp容忍度的信息。作为一名快速的解决方案,我将测试更改了casting到float后再比较。这允许使用Azul构建成功。
0 投票

记录在 https://clojure.atlassian.net/browse/CLJ-2689 并添加了一个补丁,如果您想尝试它。

...