The ideal situation is to have a function - y=f(x) - that correctly calculates all values . However this is not always possible, or it takes too much time1. Then a lookup table that contains all possible points can be the next ideal option2. As that is not -always -feasible on an Arduino (or any computer) a lookup table with interpolation is a realistic option. That is exactly what MultiMap() does.
The number of points you need depends on (1) the linearity of the graph between two points and (2) the error - abs or rel - that is acceptable for your application. E.g. if the curve is “very dynamic” - has much non linearity - you need more points. MultiMap() can have different “local densities” of input values to handle increased “local dynamics”. The only restriction is the input values should be increasing.
There is one important difference between Map() and MultiMap(), and that is that the Map() function interpolates also outside the given input/output range where MultiMap() truncates to the first/last value of the output range.
x = map(10, 100, 200, 50, 100); results in x = 5 a value outside the output range.
1One could cache calculated values to speed up the math but that only works if input values tend to repeat
2Another second best is an approximation function of course
update: added - always - in line 3,