Approach a value with a given acceleration without overshooting.
/// approach_value(current_value, target_value, acceleration);
/// @arg current_value
/// @arg target_value
/// @arg acceleration
var _val = argument0, _target = argument1, _acc = argument2;
if sign(_target - _val) == sign(_acc) {
return median(_val, _val + _acc, _target);
}
return _val;