Interesting stuff. The precision of the numbers on the gpu varies depending on the hardware but the renderer does guarantee at least some minimum precisions.
Webgl1 gives at least 24,16 and 10bit for highp,mediump and lowp float numbers.
Webgl2 gives at least 32,16 and 10bit for highp,mediump and lowp float numbers.
But my phone happens to give 32bit for all three.
Presumably your phone implements the minimum spec or close to it. With less bits floating point numbers have bigger gaps between values when farther from zero. That’s why limiting the offset to be within the size of the image helps since it’s keeping values closer to zero.
A significant example of that would be the so called “farlands” in Minecraft when exploring extremely far away.
Anyways, I thought it was interesting. Also the fact that lowp,mediump and highp all are 32bit on my phone means if I was to make a shader I wouldn’t encounter issues that other users would see when I use mediump or lowp.