Самый эффективный / элегантный способ обрезать число?

Учитывая действительное (n), максимальное значение, которое может быть этим вещественным (верхнее), и минимальное значение, которое может быть (нижнее), как мы можем наиболее эффективно отсечь n, чтобы оно остается между нижним и верхним?

Конечно, это можно сделать с помощью нескольких операторов if, но это скучно! А как насчет более компактных и элегантных / забавных решений?

Моя собственная быстрая попытка (C / C ++):

float clip( float n, float lower, float upper )
{
    n = ( n > lower ) * n + !( n > lower ) * lower;
    return ( n < upper ) * n + !( n < upper ) * upper;
}

Я уверен, что есть другие, более эффективные способы сделать это, поэтому я публикую это здесь. .!

47
задан Alex Z 17 February 2012 в 06:47
поделиться