I have checked this similar question, but the suggestions did not solve my problem: Low precision and clamping when writing to floating point FBO.
I
You must use glClampColor to state whether the colors you read with glReadPixels will be clamped or not.
glReadPixels
Note that this is just for the reading of the color. What gets written by the fragment shader will always be unclamped.