Math.mutiplyHigh() is signed
Raffaello Giulietti
raffaello.giulietti at gmail.com
Tue Jun 23 13:29:41 UTC 2020
Hi,
in defense of the current spec, integer arithmetic is signed by default
and unsigned behavior is evident from the method names, like
Long::compareUnsigned or Long::divideUnsigned
But your spec is even clearer ;-)
Greetings
Raffaello
> In retrospect I don't know why I expected Math.multiplyHigh() to
> return the high word of the unsigned product of two 64-bit numbers,
> given that long is signed; in my defence however, the docs don't
> actually seem to specify.
>
> WDYT about a patch like this to clarify?
>
> diff --git a/src/java.base/share/classes/java/lang/Math.java
> b/src/java.base/share/classes/java/lang/Math.java
> index 8147b7109e2..552501ca6d7 100644
> --- a/src/java.base/share/classes/java/lang/Math.java
> +++ b/src/java.base/share/classes/java/lang/Math.java
> @@ -1095,8 +1095,8 @@ public final class Math {
> }
>
> /**
> - * Returns as a {@code long} the most significant 64 bits of the 128-bit
> - * product of two 64-bit factors.
> + * Returns as a {@code long} the most significant 64 bits of the
> signed 128-bit
> + * product of two 64-bit signed factors.
> *
> * @param x the first value
> * @param y the second value
>
>
> --
> - DML
More information about the core-libs-dev
mailing list