Hi all, I've found bug in parallel sorting of float / double arrays in the latest JDK.
When float / double values are sorted, additional actions are required: NaNs must be moved to the end and negative zeros must be placed before positive zeros. Current implementation of Arrays.parallelSort(float[] / double []) invokes parallel merge sort from ArraysParallelSortHelpers class, but it doesn't arrange NaNs and -0.0. @Alan, Brent, Laurent Could you please file a bug? New optimized version of DualPivotQuicksort (which is under review) works fine and doesn't contain this bug. Please, look at my test case to reproduce it. ---------------------------------------------------------------------------------------------------------------------- import java.util.Random; public class FailedFloat { private static final int MAX_N = (1 << 13) /* Arrays.MIN_ARRAY_SORT_GRAN */ + 10; public static void main(String[] args) { float[] a = new float[MAX_N]; random(a); java.util.Arrays.parallelSort(a); check(a); System.out.println("PASSED"); } private static void random(float[] a) { Random random = new Random(777); for (int i = 0; i < MAX_N; i++) { a[i] = random.nextBoolean() ? -0.0f : 0.0f; } } private static void check(float[] a) { for (int i = 0; i < a.length - 1; ++i) { if (Float.floatToRawIntBits(a[i]) == 0 && Float.floatToRawIntBits(a[i + 1]) < 0) { throw new RuntimeException(a[i] + " goes before "+ a[i + 1] + " at position " + i); } } } } ------------------------------------------------------------------------------------------------------------------------ Thank you, Vladimir