ShaderLab: frac() vs fmod() in partial texture wrapping, which is better?

Currently, I want to repeat (wrap) a texture partially in fragment shader.

Since I found following topic, I could know frac() function.

So, for example, when we want to repeat texture 8 times in [0.25, 0.75] range for both u- and v-axis, we can implement it with frac() like following URP shader code.

float4 frag(Varyings IN) : SV_TARGET
{
  float2 uv = frac(IN.uv * 8) / 2 + 0.25;
  return SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, uv);
}

But I noticed that we can also implement it with fmod() like following.

float4 frag(Varyings IN) : SV_TARGET
{
  float2 uv = fmod(IN.uv, 0.125) * 4 + 0.25;
  return SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, uv);
}

Which method is better (e.g., low calculation cost, high speed, etc.) for GPU?

I guess it is different for each GPU implementation, but I want to know which is “generally” considered better. (I’m more glad if reference or citing URLs are also available for further study.)

In addition, I want to know another method if it is better than above methods.