The Galaxy S3 uses a Mali 400 gpu. Unfortunately fragment shaders on these gpus only support lowp and mediump precision in the fragment shader. Although the expected result of length(tc)
is less than the maximum value for a mediump float, the intermediate results will be greater.
Perhaps you could scale your vector before finding its length:
if (length((1./720.)*tc) < 1.)
{
...