GLSL Volume Rendering Artifacts

I am trying out some volume rendering but I have hit a brick wall. I have a vertex shader that gives the fragment shader it’s world-space coordinates, and from those coordinates the fragment shader outputs the density of the volume by interpolating between horizontal planes.

//shader.frag:
uniform sampler2D m_Noise; //perlin noise image
varying vec2 uv;  //uv is the 2D coordinate on the quad
varying vec3 ijk; //ijk is the world-space coordinate of the fragment

void main() {
    vec2 xz = (ijk.xz + 100) / 500.0;
    float y = ijk.y;
    float j = floor(y);

    float f = 0.234 * j;       //0.234 is a random number. The artifacts 
    float g = 0.234 * (j + 1); //appear when this number is not an integer

    float a = texture2D(m_Noise, frac(xz + f)).r; //lower layer (a translation of the image)
    float b = texture2D(m_Noise, frac(xz + g)).r; //upper layer (a translation of the image)
    float c = mix(a, b, frac(y)); //linear interpolation between the layers
    gl_FragColor = vec4(vec3(1), c);
}

However, whenever the 0.234 value is not a mathematical integer, horizontal artifacts only appear where the floor(/* y-coordinate of fragment */) is close to 0:

These lines appear and disappear randomly as the camera moves around or closer/farther from the quad. How can I fix this?