RFR: 8341260: Add Float16 to jdk.incubator.vector [v3]
Joe Darcy
darcy at openjdk.org
Tue Oct 22 20:06:00 UTC 2024
On Tue, 22 Oct 2024 14:18:33 GMT, Raffaello Giulietti <rgiulietti at openjdk.org> wrote:
>> Joe Darcy has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains seven additional commits since the last revision:
>>
>> - Add @since tag, respond to review feedback.
>> - Merge branch 'master' into JDK-8341260
>> - Remove comments for intrinsics per review feedback.
>> - Update with changes from lworld+fp16 Float16.
>> - Merge branch 'master' into JDK-8341260
>> - Add support for BigDecimal -> Float16 conversion.
>> - JDK-8341260: Add Float16 to jdk.incubator.vector
>
> src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Float16.java line 471:
>
>> 469: // }
>> 470: // }
>> 471: // }
>
> Suggestion:
>
> int scale = bd.scale();
> BigInteger unscaledValue = bd.unscaledValue();
>
> if (unscaledValue.abs().compareTo(BigInteger.valueOf(Long.MAX_VALUE)) <= 0) {
> long intCompact = unscaledValue.longValue();
> Float16 v = Float16.valueOf(intCompact);
> if (scale == 0) {
> return v;
> }
> /*
> * The discussion for the double case also applies here. That is,
> * the following test is precise for all long values, but here
> * Long.MAX_VALUE is not an issue.
> */
> if (v.longValue() == intCompact) {
> if (0 < scale && scale < FLOAT16_10_POW.length) {
> return Float16.divide(v, FLOAT16_10_POW[scale]);
> }
> if (0 > scale && scale > -FLOAT16_10_POW.length) {
> return Float16.multiply(v, FLOAT16_10_POW[-scale]);
> }
> }
> }
That does the trick; thanks for tracking down the mistake.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21574#discussion_r1811306593
More information about the core-libs-dev
mailing list