)
Returns the lesser of two numbers.
Returns NaN if either argument is NaN.
The lesser of -0.0
and 0.0
is -0.0
.
If the arguments are otherwise equal (including int and doubles with the
same mathematical value) then it is unspecified which of the two arguments
is returned.
Source
/**
* Returns the lesser of two numbers.
*
* Returns NaN if either argument is NaN.
* The lesser of [:-0.0:] and [:0.0:] is [:-0.0:].
* If the arguments are otherwise equal (including int and doubles with the
* same mathematical value) then it is unspecified which of the two arguments
* is returned.
*/
num min(num a, num b) {
// These partially redundant type checks improve code quality for dart2js.
// Most of the improvement is at call sites from the inferred non-null num
// return type.
if (a is! num) throw new ArgumentError(a);
if (b is! num) throw new ArgumentError(b);
if (a > b) return b;
if (a < b) return a;
if (b is double) {
// Special case for NaN and -0.0. If one argument is NaN return NaN.
// [min] must also distinguish between -0.0 and 0.0.
if (a is double) {
if (a == 0.0) {
// a is either 0.0 or -0.0. b is either 0.0, -0.0 or NaN.
// The following returns -0.0 if either a or b is -0.0, and it
// returns NaN if b is NaN.
return (a + b) * a * b;
}
}
// Check for NaN and b == -0.0.
if (a == 0 && b.isNegative || b.isNaN) return b;
return a;
}
return a;
}