put_in_range

2021年6月19日

これは範囲と値を取り、与えられた値が範囲内であればそれを返す単純な関数です。範囲外の場合は、最も近い範囲の終わりの値が返されます。 

#include <dlib / algs.h>

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
template <typename T>
T put_in_range (
    const T& a,
    const T& b,
    const T& val
)
/*!
    requires
        - T is a type that looks like double, float, int, or so forth
    ensures
        - if (val is within the range [a,b]) then
            - returns val
        - else
            - returns the end of the range [a,b] that is closest to val
!*/
{
    if (a < b)
    {
        if (val < a)
            return a;
        else if (val > b)
            return b;
    }
    else
    {
        if (val < b)
            return b;
        else if (val > a)
            return a;
    }
 
    return val;
}
 
// overload for double
inline double put_in_range(const double& a, const double& b, const double& val)
{ return put_in_range<double>(a,b,val); }

Posted by kinya