RFR: 8301226: Add clamp() methods to java.lang.Math and to StrictMath [v4]

Joe Darcy darcy at openjdk.org
Tue Feb 7 01:00:46 UTC 2023


On Mon, 6 Feb 2023 09:46:15 GMT, Tagir F. Valeev <tvaleev at openjdk.org> wrote:

>> clamp() methods added to Math and StrictMath
>> 
>> `int clamp(long, int, int)` is somewhat different, as it accepts a `long` value and safely clamps it to an `int` range. Other overloads work with a particular type (long, float and double). Using similar approach in other cases (e.g. `float clamp(double, float, float)`) may cause accidental precision loss even if the value is within range, so I decided to avoid this.
>> 
>> In all cases, `max >= min` precondition should met. For double and float we additionally order `-0.0 < 0.0`, similarly to what Math.max or Double.compare do. In double and float overloads I try to keep at most one arg-check comparison on common path, so the order of checks might look unusual.
>> 
>> For tests, I noticed that tests in java/lang/Math don't use any testing framework (even newer tests), so I somehow mimic the approach of neighbour tests.
>
> Tagir F. Valeev has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Added explanatory comments

src/java.base/share/classes/java/lang/Math.java line 2266:

> 2264:         // If min == max, we should additionally check for +0.0/-0.0 case,
> 2265:         // so we're still visiting the if statement.
> 2266:         if (!(min < max)) {

A suggestion for an additional comment on this line like:

// min greater than, equal to, or unordered with respect to max; NaN values are unorded

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

PR: https://git.openjdk.org/jdk/pull/12428


More information about the core-libs-dev mailing list