I wrote a simple program to draw a mandelbrot set in the fragment shader, it's currently using a uniform float as it's scale factor which allows a certain degree of zoom ability but then the image quality deteriorates really badly and I can't get to some of the more interesting places in the set.

I was wondering is it possible to use large fixed point values and send them into the fragment shader?

I would need a really large factional part and only 1 or 2 bits for decimal since it'll be around 1 to -1.[0000000000...]

I might be approaching the problem wrong I am unsure that's why I am asking here. How can I send such large numbers to the fragment shader? I noticed that I am able to do logical shifts in the fragment shader so 1<<30 or 1>>30 both work.

I am just unsure how to put it together. Here's the fragment shader btw.

Code :
#version 330 core
 
in vec4 fcolor;
in vec2 fTexCoord;
in vec2 fCoord;
 
uniform int maxIterations;
uniform sampler1D mandiTexture;
uniform vec2 center;
uniform float scale;
 
out vec4 color;
 
void main()
{
   float ONE_OVER_LOG_TWO = 1.0f/0.69314718055f;
   vec2 c, z;
   vec4 colora, colorb;
 
    c.x = (fCoord.x * scale) + center.x;
    c.y = (fCoord.y * scale) + center.y;
 
    	int i;
    	z = vec2(0.0f, 0.0f);
        float size, smoothed, colorI;
 
    	for(i=0; i< maxIterations; i++) {
    		float x = (z.x * z.x - z.y * z.y) + c.x;
    		float y = (z.y * z.x + z.x * z.y) + c.y;
 
    		if((x * x + y * y) > (1 << 30))
    		{
    		    break;
    		}
    		z.x = x;
    		z.y = y;
    	}
 
    vec4 tcolor;
 
    if (i == maxIterations)
    {
       tcolor = vec4(0.0f, 0.0f, 0.0f, 1.0f);
    }
       else
    {
       float tr, tg, tb;
       float t = float(i)/float(maxIterations);
       tr = (9*(1-t)*t*t*t);
       tg = (15*(1-t)*(1-t)*t*t);
       tb = (8.5*(1-t)*(1-t)*(1-t)*t);
       tcolor = vec4(tr, tg, tb, 1.0f);
    }
 
    color =  tcolor;
}