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.

Reply via email to