c# – Confuse with the returned values and effect generated in the code

Several days ago I asked about this question How to construct a propeller clock in Unity? . I have 0 knowledge about shader so I picked up tutorial to learn, finding https://developer.download.nvidia.com/cg/length.html to understand the math function but still not helping much on understanding the code. I cutoff part of the code to check the effect on the image.
I have questions as below

I)what is the range of output value for i.uv.y or i.uv.x? Tried the web but didn’t found any info. Next I discard part of the code as below and check what the result, I tested this by using a plane. I check the documentation atan(angle) gave a value in between -pi and pi so the range of float difference = frac( angle / (2.0f * 3.141592653589f)) is in between -0.5 and 0.5, I tested with frac(0.3),frac(0.25), which is same as return 0.3 or return 0.25 since frac preserve only the decimal number but why I couldn’t generate the 1st image below?

ii)From the 1st picture, I have a dark image on the 1st quadrant, bright image on the 4th quadrant and have another image with all quadrant which constantly varying at the same brightness between between dark and bright as shown in 2nd and 3rd images, what I been thinking is isn’t the sum of these 2 images should generate an image with 1st and 4th quadrant varying at different brightness while 2 and 3 quadrant varying at same brightness as each other but instead I got what is displayed in the 4th picture? A brightness gradient sweeping in a circle around the plane?

Shader "Unlit/POVDisplay"
{
 Properties
 {
    _MainTex ("Texture", 2D) = "white" {}
 }
 SubShader
 {
    // Render with transparent objects, after the opaque pass.
    Tags { "RenderType"="Transparent" "Queue"="Transparent"}
    LOD 100

    // Don't write to the depth buffer.
    ZWrite Off
    // Additive blending (add light/glow).
    Blend One One

    Pass
    {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag

        #include "UnityCG.cginc"

        

        struct appdata
        {
            float4 vertex : POSITION;
            float2 uv : TEXCOORD0;
        };

        struct v2f
        {
            float2 uv : TEXCOORD0;
            float4 vertex : SV_POSITION;
        };

        sampler2D _MainTex;
        float4 _MainTex_ST;

        v2f vert (appdata v)
        {
            v2f o;
            o.vertex = UnityObjectToClipPos(v.vertex);
            // Shift our texture coordinates so 0 is in the center,
            // and we go to -1 ... +1 at the edges.
            o.uv = (v.uv - 0.5f) * 2.0f;
            return o;
        }

        fixed4 frag (v2f i) : SV_Target
        {
            // Vary this parameter to control how many rings of light you get.
            const float ledCount = 32;
                         
            // Simulate the strip of LEDs spinning around very fast.
            float headAngle = _Time.y ;
            
            // Compute the angle of the pixel we're rendering.
            float angle = atan2(i.uv.y, i.uv.x);
           
            // Compute how recently we've been illuminated.
            // 0 = head is about to reach us (1 full cycle behind).
            // 1 = head just reached us.
            float difference = frac( angle / (2.0f * 3.141592653589f));
           return difference;
           
        ENDCG
    }
}

}

1st image
enter image description here

Next I tried the code
float difference = frac( headAngle) got an image which is constantly varying between dark and bright images as below 2 images
enter image description here

enter image description here

4th image
enter image description here