aneira mais eficiente / elegante de recortar um númer

Dado um real (n), um valor máximo que esse real pode ser (superior) e um valor mínimo que esse real pode ser (inferior), como podemos capturar n com mais eficiência, de modo que permaneça entre inferior e superior?

Claro, usar várias instruções if pode fazer isso, mas isso é chato! Que tal soluções mais compactas e elegantes / divertidas?

Minha própria tentativa rápida (C / C ++):

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

Tenho certeza de que existem outras maneiras melhores de fazer isso, é por isso que estou colocando isso lá fora ..!

questionAnswers(26)

yourAnswerToTheQuestion