В следующей функции я ищу выражение для замены isIntegral<T>
.
Намерение состоит в том, что, когда T
является целочисленным типом, мы добавляем 0.5f
до того, как static_cast
косвенно укажет значение(и таким образом мы получаем округленное значение), но когда T
является дробным типом, мы ничего не добавляем, и поэтому static_cast
может только снизить точность.
T interpolate( T const & prev, T const & next, float interpolation )
{
float prevFloat = static_cast< float >( prev );
float nextFloat = static_cast< float >( next );
float result = prevFloat + ( (nextFloat-prevFloat) * interpolation );
return static_cast< T >( result + ( isIntegral<T> ? 0.5f : 0.0f );
}