You might know the Range Mapper node in Xpresso. A very handy tool to map one value range to another, optionally applying a spline curve. Here is how you can do the same in C++.
inline Real MapRange(Real value, Real min_input, Real max_input, Real min_output, Real max_output, SplineData *curve = NULL) { Real inrange = max_input - min_input; if (CompareFloatTolerant(inrange, RCO 0.0)) value = RCO 0.0; // Prevent DivByZero error else value = (value - min_input) / inrange; // Map input range to [0.0 ... 1.0] if (curve) value = curve->GetPoint(value).y; // Apply spline curve return min_output + (max_output - min_output) * value; // Map to output range and return result }