Of course, there has to be a Mandelbrot submission.

![enter image description here][1]


    char red_fn(int i,int j){
        float x=0,y=0;int k;for(k=0;k++<256;){float a=x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y>4)break;}return k>31?256:k*8;
    }
    char green_fn(int i,int j){
        float x=0,y=0;int k;for(k=0;k++<256;){float a=x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y>4)break;}return k>63?256:k*4;
    }
    char blue_fn(int i,int j){
        float x=0,y=0;int k;for(k=0;k++<256;){float a=x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y>4)break;}return k;
    }

Trying to improve the colour scheme now. Is it cheating if I define the computation as a macro is `red_fn` and use that macro in the other two so I have more characters for fancy colour selection in green and blue?

**Edit:** It's really hard to come up with decent colour schemes with these few remaining bytes. Here is one other version:

    /* RED   */ return log(k)*47;
    /* GREEN */ return log(k)*47;
    /* BLUE  */ return 128-log(k)*23;

![enter image description here][2]

And as per githubphagocyte's suggestion and with Todd Lehman's improvements, we can easily pick smaller sections:

E.g.

    char red_fn(int i,int j){
        float x=0,y=0,k=0,X,Y;while(k++<256e2&&(X=x*x)+(Y=y*y)<4)y=2*x*y+(j-89500)/102400.,x=X-Y+(i-14680)/102400.;return log(k)/10.15*256;
    }
    char green_fn(int i,int j){
        float x=0,y=0,k=0,X,Y;while(k++<256e2&&(X=x*x)+(Y=y*y)<4)y=2*x*y+(j-89500)/102400.,x=X-Y+(i-14680)/102400.;return log(k)/10.15*256;
    }
    char blue_fn(int i,int j){
        float x=0,y=0,k=0,X,Y;while(k++<256e2&&(X=x*x)+(Y=y*y)<4)y=2*x*y+(j-89500)/102400.,x=X-Y+(i-14680)/102400.;return 128-k/200;
    }

gives

![enter image description here][3]


  [1]: https://i.sstatic.net/bJZHw.png
  [2]: https://i.sstatic.net/ha0lJ.png
  [3]: https://i.sstatic.net/20cg2.png