Lepszy sposób niż gdyby w ogóle… dla interpolacji liniowej

pytanie jest łatwe. Powiedzmy, że masz funkcję

double interpolate (double x);

i masz tabelę, która ma mapę znanych x-> y
na przykład
5 15
7 18
10 22
Uwaga: prawdziwe tabele są większe ofc, to tylko przykład.

więc dla 8 powróciłbyś 18 + ((8-7) / (10-7)) * (22-18) = 19.3333333

Jeden fajny sposób, jaki znalazłem, tohttp://www.bnikolic.co.uk/blog/cpp-map-interp.html (Krótko mówiąc, używa std :: map, key = x, value = y dla par danych x-> y).

Jeśli ktoś zapyta, co jest w tytule, jeśli jest inaczej, to w zasadzie:

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

Czy jest więc bardziej sprytny sposób na zrobienie tego lub odwzorowanie sposobu, w jaki jest najnowocześniejszy? :)

Btw Wolę w C ++, ale oczywiście każde rozwiązanie językowe, które ma mapowanie 1: 1 na C ++, jest miłe.

questionAnswers(6)

yourAnswerToTheQuestion