2024年Clojure现状调查!中分享您的想法。

欢迎!请查看关于页面以了解更多关于如何操作的信息。

0
Clojure
已关闭

这并不是一个Clojure的问题,但是只是想告知一下...我在我的M1 MacBook Air上使用Azul Java 8。

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

结果是java.lang.Math/exp在这个JVM上并不准确。特别是构建日志说:

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

它看起来在双精度浮点数的最后一位有问题。我使用Azul是因为它声称在M1上是ARM原生,但是M1可能在底层仿真运行一些Intel二进制文件,可能会有一些问题。不确定真正发生了什么,但是我想提醒一下这种不一致,以防其他人遇到类似情况。我假设问题是Azul JVM的bug。如果我能够找出适当的渠道,我会尝试跟进他们。

顺便问一下,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),因此这是可以的,但测试应该足够宽容以确保通过。

感谢提供关于可接受的 ulp 容忍度的信息。作为一个简单的解决方案,我将测试代码中的比较改为在比较前将值强制转换为 float。这样可以确保与 Azul 构建成功。
0

已记录为 https://clojure.atlassian.net/browse/CLJ-2689,如有需要可添加补丁进行测试。

...