Reading texture values from for loop

I feel a little guilty about posting again, however the context of my question has changed.

I am attempting to read from a lookup texture centered around a pixel (lets say i have a texture that is 10x10, and I want to read the pixels around (4,2), i would read

(3,1),(3,2)(3,3)
(4,1),(4,2)(4,3)
(5,1),(5,2)(5,3)

The loop is a little more complicated but that is the general idea. If I make the loop look like the following

float xcenter = 5.0;
float ycenter = 5.0;
for(float i = -5.0; i < 5.0; i++){
    for(float j = -5.0; j < 5.0; j++){

    }
}

It works (however it goes over all of the particles which defeats the purpose), however if I calculate the value dynamically (which is what I need), then I get really bizarre behavior. Is this a problem with GLSL or a problem with my code? I output the values to an image and read the pixel values and they all appear to be within the right range.

The entire shader code can be seen here:
(if I remove the hard coded 70, and remove the comments it breaks, but all of those values are between 0 and 144. This is where I am confused. I feel like this code should still work fine.).

    uniform sampler2D pos;
    uniform sampler2D buckets;


    uniform vec2  res;
    uniform vec2  screenSize;
    uniform float size;
    uniform float bounce;
    const float width = &WIDTH;
    const float height = &HEIGHT;
    const float cellSize = &CELLSIZE;
    const float particlesPerCell = &PPC;
    const float bucketsWidth = &BW;
    const float bucketsHeight = &BH;

    $rand
    void main(){

      vec2 uv = gl_FragCoord.xy / res;
      vec4 posi  = texture2D( pos , uv );
      float x = posi.x;
      float y = posi.y;
      float z = posi.z;
      float target = 1.0 * size;

      
      float x_bkt = floor( (x + (screenSize.x/2.0) )/cellSize);
      float y_bkt = floor( (y + (screenSize.y/2.0) )/cellSize);


      float x_bkt_ind_start = 70.0; //x_bkt * particlesPerCell;
      float y_bkt_ind_start =70.0; //y_bkt * particlesPerCell;

      //this is the code that is acting weirdly
      for(float j = -144.0 ; j < 144.0; j++){
        for(float i = -144.0 ; i < 144.0; i++){

          float  x_bkt_ind = (x_bkt_ind_start + i)/bucketsWidth;
          float  y_bkt_ind = (y_bkt_ind_start + j)/bucketsHeight;


          vec4 ind2 = texture2D( buckets , vec2(x_bkt_ind,y_bkt_ind) );

          if( abs(ind2.z - 1.0) > 0.00001  || x_bkt_ind < 0.0 || x_bkt_ind > 1.0 || y_bkt_ind < 0.0 || y_bkt_ind > 1.0 ){
            continue;
          }
          
           vec4 pos2 = texture2D( pos , vec2(ind2.xy)/res );

           vec2 diff = posi.xy - pos2.xy;

           float dist = length(diff);


          vec2 uvDiff = ind2.xy -  gl_FragCoord.xy ;
          float uvDist = abs(length(uvDiff));

          
          if(dist <= target && uvDist >= 0.5){
            float factor = (dist-target)/dist;
            x = x - diff.x * factor * 0.5;
            y = y - diff.y * factor * 0.5;
          }

          
        }
      }
      

      gl_FragColor = vec4( x, y, x_bkt_ind_start , y_bkt_ind_start);


    }