1

下面的 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]

如果我使用floator doubleorint代替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 循环中移动代码calculaterunTest它会正确运行。此外,如果我读取其中的input值,calculate它就可以工作。

那么,这个问题的原因是什么,我应该在哪里留下我的反馈来解决这个问题?

4

0 回答 0