Where the movement vector is between -128 and +127, there may be as much as a +/- 40 point discrepancy around the home position. To compensate for this in your programs, you may reduce the stick resolution or clip the analogue value.
Since the returned analogue value seems accurate apart from the home
position, I would suggest that you use the clipping method. Such
a change would probably not be perceived by users of your
software.
You may also want to remove the slight directional bias (if you
make the clipping limits -41 and +40, the effective resolution
will be +/- 87 instead of -88/+87).
Be aware that this +/-40 discrepancy was deduced from
experimentation with just one analogue controller and
discrepancies in the manufacturing process, temperature
fluctuations (and numerous other miscellaneous effects) may
produce inaccuracies even larger than this in individual cases.
I have also not tested any other type of analogue controller,
but I presume that similar inaccuracies will occur with them all.