Hello, Remi! > Given that the semantics of NaN is clearly defined for Math.max/min (if one > of the values is NaN the result is NaN), > I don't believe we need a special case here for NaN. > > The semantics should be, this is equivalent to execute > Math.max(min, Math.min(max, value)) > > So clamp(double) can be implemented using minsd and maxsd on x64, which is > already what the VM does.
I agree that for NaN value, it's reasonable to return NaN. However, I think it's better to throw if min or max is NaN, as we should check the invariant that min <= max. We can do this in a single check: if (!(min <= max)) throw new IllegalArgumentException(...); With best regards, Tagir Valeev.