Лучший способ, чем if else if else… для линейной интерполяции

вопрос легкий. Допустим, у вас есть функция

double interpolate (double x);

и у вас есть таблица с известной картой x -> y
например
5 15
7 18
10 22
примечание:реальные таблицы больше, это просто пример.

поэтому для 8 вы вернете 18+ ((8 -7 )/ (10 -7 ))*(22 -18 )= 19,3333333

Один классный способ, который я нашел, этоhttp://www.bnikolic.co.uk/blog/cpp-map-interp.html (Короче говоря, он использует карту std ::, ключ = x, значение = y для пар данных x -> y ).

Если кто-то спросит, что такое if else if else в заголовке это в основном:

if ((x>=5) && (x<=7))
{
//interpolate
}
else 
     if((x>=7) && x<=10)
     {
      //interpolate
     }

Так есть ли более умный способ сделать это или способ карты - это современное состояние?:)

Кстати, я предпочитаю решения на C++, но очевидно, что любое языковое решение, имеющее 1 :1 сопоставление с C++, хорошо.

13
задан NoSenseEtAl 11 July 2012 в 11:00
поделиться