下面的 Java 代码在 Cortex-A53 尤其是 Xperia XA 设备上运行时会返回不可预测的结果。
第一次迭代打印正确的值:
[24, 42, 61, 45, 29, 46, 35, 36, 48, 47, 20, 64, 45, 15, 37, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70 , 70, 70, 70, 70, 70, 70]
经过一些重复后,它会打印:
[24,61,29,35,48,20,45,37,1886962617,41137,6952,58489,6151,55208,154,57100,20418,20418,5718,57100,20418,20418 , 57100, 20418, 57100, 20418, 57100, 20418]
如果我使用float
or double
orint
代替long
,结果仍然错误但不同:
[24.0, 61.0, 29.0, 35.0, 48.0, 20.0, 45.0, 37.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0. , 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
在其他设备上它按预期运行。这是 JVM 的问题还是由 CPU 勘误表引起的?
public static void runTest() {
long[] t = new long[]{ 23,41, 60, 44, 28, 45, 34, 35, 47, 46, 19, 63, 44, 14, 36, 69};
for(int i = 0; i < 40; i++) {
long[] output = calculate(t);
Log.e("TEST", Arrays.toString(output));
}
}
private static long[] calculate(long[] input) {
long[] result = new long[31];
for (int i = 0; i < 16; i ++) {
for (int j = 0; j < 16; j++) {
result[i + j] = input[i] + 1;
}
}
return result;
}
如果我从 for 循环中移动代码calculate
,runTest
它会正确运行。此外,如果我读取其中的input
值,calculate
它就可以工作。
那么,这个问题的原因是什么,我应该在哪里留下我的反馈来解决这个问题?