RFR: 8373722: [TESTBUG] compiler/vectorapi/TestVectorOperationsWithPartialSize.java fails intermittently
Jie Fu
jiefu at openjdk.org
Wed Dec 24 14:56:50 UTC 2025
On Wed, 24 Dec 2025 14:38:37 GMT, Jie Fu <jiefu at openjdk.org> wrote:
>> Yeah, I'm trying to extend the value range to `1~3000`. The tests are still running... Since the result largely depends on the random values, I run this test `500` times on SVE/NEON/X86 machines respectively (**1500** times totally), and have not observed failure now. Is that fine to you? I will update the test once all tests pass. Thanks for looking at this change!
>
>> Yeah, I'm trying to extend the value range to `1~3000`. The tests are still running... Since the result largely depends on the random values, I run this test `500` times on SVE/NEON/X86 machines respectively (**1500** times totally), and have not observed failure now. Is that fine to you? I will update the test once all tests pass. Thanks for looking at this change!
>
> As with range `1~3000`, we may still see failures even with 1000ULP according to the following program, right?
>
>
> class T {
> public static void main(String[] args) {
>
> float ROUNDING_ERROR_FACTOR_ADD = 1000.0f;
>
> Float a = 1.0f + (ROUNDING_ERROR_FACTOR_ADD + 1) * Math.ulp(1.0f);
> Float b = 3000.0f;
>
> Float expected = a + b - b;
> Float actual = a + (b - b);
>
> float tolerance = Math.ulp(expected) * ROUNDING_ERROR_FACTOR_ADD;
> if (Math.abs(expected - actual) > tolerance) {
> System.out.println("Error: Out of tolerance!");
> }
> }
> }
> > Yeah, I'm trying to extend the value range to `1~3000`. The tests are still running... Since the result largely depends on the random values, I run this test `500` times on SVE/NEON/X86 machines respectively (**1500** times totally), and have not observed failure now. Is that fine to you? I will update the test once all tests pass. Thanks for looking at this change!
>
> As with range `1~3000`, we may still see failures even with 1000ULP according to the following program, right?
>
> ```java
> class T {
> public static void main(String[] args) {
>
> float ROUNDING_ERROR_FACTOR_ADD = 1000.0f;
>
> Float a = 1.0f + (ROUNDING_ERROR_FACTOR_ADD + 1) * Math.ulp(1.0f);
> Float b = 3000.0f;
>
> Float expected = a + b - b;
> Float actual = a + (b - b);
>
> float tolerance = Math.ulp(expected) * ROUNDING_ERROR_FACTOR_ADD;
> if (Math.abs(expected - actual) > tolerance) {
> System.out.println("Error: Out of tolerance!");
> }
> }
> }
> ```
Oops, if the range is `1~3000`, there is no negative float, so the above program should not happen.
Just ignore it.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/28960#discussion_r2645879485
More information about the hotspot-compiler-dev
mailing list