RFR: 8341260: Add Float16 to jdk.incubator.vector [v6]

Joe Darcy darcy at openjdk.org
Wed Oct 23 15:43:14 UTC 2024


On Wed, 23 Oct 2024 12:53:20 GMT, Raffaello Giulietti <rgiulietti at openjdk.org> wrote:

>> Joe Darcy has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Add equals/hashCode implementation; tests to follow.
>
> src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Float16.java line 708:
> 
>> 706:     public static int hashCode(Float16 value) {
>> 707:         Float16 f16 = isNaN(value) ? Float16.NaN : value;
>> 708:         return (int)float16ToRawShortBits(f16);
> 
> What about randomizing the returned value? IIUC, JEP 401 does not speak against.
> The purpose would not be to conceal anything, but to ensure that clients cannot rely on specific values.
> 
> 
>     private static final int HASH_MASK = RandomGenerator.getDefault().nextInt();
>     
>     /**
>      * Returns a hash code for a {@code Float16} value; compatible with
>      * {@code Float16.hashCode()}.
>      *
>      * @param value the value to hash
>      * @return a hash code value for a {@code Float16} value.
>      */
>     public static int hashCode(Float16 value) {
>         Float16 f16 = isNaN(value) ? Float16.NaN : value;
>         int bits = float16ToRawShortBits(f16);
>         return (bits << 16 | bits & 0xFFFF) ^ HASH_MASK;
>     }

Hmm. Certainly at this point, I don't think hash randomization is necessary; although it might be helpful at a later point. Set.of() uses randomized iteration order as a precedent in that direction.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/21574#discussion_r1813063677


More information about the core-libs-dev mailing list