On Tue, Aug 2, 2016 at 11:45 AM, Random832 <random832@fastmail.com> wrote:

-- Sure, but what the standard doesn't say is exactly what sequence of

comparisons is entailed by a clamp function.

def clamp(x, a, b):

if x < a: return a

else:

if x > b: return b

else: return x

def clamp(x, a, b):

if a <= x:

if x <= b: return x

else: return b

else: return a

There are, technically, eight possible naive implementations, varying

along three axes:

Exactly-- I thought this was self evident, but apparently not -- thanks for spelling it out.

All such functions are equivalent if {a, b, x} is a set over which the

relational operators define a total ordering, and a <= b. However, this

is not the case if NaN is used for any of the arguments.

Exactly again -- NaN's are kind of a pain :-(

As for the convert to floats issue -- correctness is more important than performance, and performance is probably most important for the special case of all floats. (or floats and integers, I suppose) -- i'm sure we can find a solution. LIkely something iike the second option above would work fine, and also work for anything with an ordinary total ordering.

-Chris

Christopher Barker, Ph.D.

Oceanographer

Emergency Response Division

NOAA/NOS/OR&R (206) 526-6959 voice

7600 Sand Point Way NE (206) 526-6329 fax

Seattle, WA 98115 (206) 526-6317 main reception

Chris.Barker@noaa.gov