## Fractal

Moderator: nitrofurano

Posts: 797

Joined: Mon Apr 27, 2009 7:26 pm

Location: Slough, Berkshire, UK

### Fractal

Just for fun.

Incidentally, if I change the float types to fixed, it crashes. Has something gone wrong with fixed type maths?

EDIT: Updated with fixed and exit for, so if people use it here, they get the best version.

Code:
`#define width 256#define height 192DIM x,y as FIXED DIM xstart,xstep,ystart,ystep as FIXEDDIM xend,yend as FIXEDDIM z,zi,newz,newzi as FIXEDDIM colour as byteDIM iter as uIntegerDIM col as uIntegerDIM i,k as uByteDIM j as uIntegerdim inset as uBytexstart=-1.6xend=0.65ystart=-1.15yend=-ystartiter=24xstep=(xend-xstart)/widthystep=(yend-ystart)/height'Main loopx=xstarty=ystartborder 0paper 0ink 7CLSfor i=0 to ( height -1 )/2 +1        for j=0 to width -1             z=0            zi=0            inset=1                for k=0 to iter                    ';z^2=(a+bi)*(a+bi) = a^2+2abi-b^2                    newz=(z*z)-(zi*zi)+x                    newzi=2*z*zi+y                    z=newz                    zi=newzi                                        if (z*z)+(zi*zi) > 4 then                        inset=0                        colour=k                        exit for                    END IF                next k                                if NOT inset then                    if colour BAND 1 THEN                        plot j,i                        plot j,192-i                    END IF                end if                                    x=x+xstep         next j                        y=y+ystep        x=xstartprint at 23,0;CAST(uinteger,i)*200/height;"%"next i                            BEEP 1,1PAUSE 0`

(This will take a long time. Even if you push an emulator to top speed)
Last edited by britlion on Sat Apr 07, 2012 10:41 am, edited 1 time in total.

Posts: 1540

Joined: Wed Nov 01, 2006 6:18 pm

Location: Santa Cruz de Tenerife, Spain

### Re: Fractal

Awesome!!!
I'll put this in the Wiki, if you don't mind, in the Examples section.

Posts: 797

Joined: Mon Apr 27, 2009 7:26 pm

Location: Slough, Berkshire, UK

### Re: Fractal

Course you can.

(Though again - why does it seem to break with fixed, not float?)

Posts: 797

Joined: Mon Apr 27, 2009 7:26 pm

Location: Slough, Berkshire, UK

### Re: Fractal

Oh - I also thought I should be able to use "end for" in the place I have "goto screen". Not sure why it refuses to compile that.

Posts: 1540

Joined: Wed Nov 01, 2006 6:18 pm

Location: Santa Cruz de Tenerife, Spain

### Re: Fractal

It might be a bug, or might be a matter of precision.
Don't know. I know there's an integer version of Mandelbrot, BTW.

Posts: 1540

Joined: Wed Nov 01, 2006 6:18 pm

Location: Santa Cruz de Tenerife, Spain

### Re: Fractal

britlion wrote:Oh - I also thought I should be able to use "end for" in the place I have "goto screen". Not sure why it refuses to compile that.

The correct syntax for that is "EXIT FOR" (this is like a Break sentence in C/C++)

Posts: 282

Joined: Sun Feb 13, 2011 3:33 am

Location: Kentucky US, used to be Birmingham UK

### Re: Fractal

quite nice

Posts: 797

Joined: Mon Apr 27, 2009 7:26 pm

Location: Slough, Berkshire, UK

### Re: Fractal

boriel wrote:
britlion wrote:Oh - I also thought I should be able to use "end for" in the place I have "goto screen". Not sure why it refuses to compile that.

The correct syntax for that is "EXIT FOR" (this is like a Break sentence in C/C++)

Doh! Me idiot.

Yes, that works. Much better than a goto.

Posts: 797

Joined: Mon Apr 27, 2009 7:26 pm

Location: Slough, Berkshire, UK

### Re: Fractal

boriel wrote:It might be a bug, or might be a matter of precision.
Don't know. I know there's an integer version of Mandelbrot, BTW.

I don't think a lack of precision should cause a restart, however...

And yes. I didn't do that one integer would be faster.

Posts: 797

Joined: Mon Apr 27, 2009 7:26 pm

Location: Slough, Berkshire, UK

### Re: Fractal

slenkar wrote:quite nice

Oh slenkar! Now you've given it away

Posts: 1540

Joined: Wed Nov 01, 2006 6:18 pm

Location: Santa Cruz de Tenerife, Spain

### Re: Fractal

britlion wrote:
boriel wrote:It might be a bug, or might be a matter of precision.
Don't know. I know there's an integer version of Mandelbrot, BTW.

I don't think a lack of precision should cause a restart, however...

And yes. I didn't do that one integer would be faster.

A restart???
Please send me the code. I would like to test it, please

Posts: 797

Joined: Mon Apr 27, 2009 7:26 pm

Location: Slough, Berkshire, UK

### Re: Fractal

Same code, with "FIXED" wherever DIM had "FLOAT"

I could believe in it going out of bounds or something, but shouldn't just crash...

Code:
`#define width 256#define height 192DIM x,y as FIXED DIM xstart,xstep,ystart,ystep as FIXEDDIM xend,yend as FIXEDDIM z,zi,newz,newzi as FIXEDDIM colour as byteDIM iter as uIntegerDIM col as uIntegerDIM i,k as uByteDIM j as uIntegerdim inset as uBytexstart=-1.6xend=0.65ystart=-1.15yend=-ystartiter=24xstep=(xend-xstart)/widthystep=(yend-ystart)/height'Main loopx=xstarty=ystartborder 0paper 0ink 7CLSfor i=0 to ( height -1 )/2 +1        for j=0 to width -1             z=0            zi=0            inset=1                for k=0 to iter                    ';z^2=(a+bi)*(a+bi) = a^2+2abi-b^2                    newz=(z*z)-(zi*zi)+x                    newzi=2*z*zi+y                    z=newz                    zi=newzi                                        if (z*z)+(zi*zi) > 4 then                        inset=0                        colour=k                        exit for                    END IF                next k                screen:                                if NOT inset then                    if colour BAND 1 THEN                        plot j,i                        plot j,192-i                    END IF                end if                                    x=x+xstep         next j                        y=y+ystep        x=xstartprint at 23,0;CAST(uinteger,i)*200/height;"%"next i                            BEEP 1,1PAUSE 1PAUSE 0                                                    `

Posts: 1540

Joined: Wed Nov 01, 2006 6:18 pm

Location: Santa Cruz de Tenerife, Spain

### Re: Fractal

It was a bug in Fixed multiplication.
I don't see much improvement.
Can you measure the time it takes to draw the fractal with fixed variables, please? There should be some performance gain.

NOTE: This release includes your MLDepacker routine (fastcalled).

NOTE2: Happy Birthday!

Posts: 797

Joined: Mon Apr 27, 2009 7:26 pm

Location: Slough, Berkshire, UK

### Re: Fractal

boriel wrote:It was a bug in Fixed multiplication.
I don't see much improvement.
Can you measure the time it takes to draw the fractal with fixed variables, please? There should be some performance gain.

I added a timer function to it, and grabbed the timer before and afterwards.

Float:
s777 : 5237.6 Seconds.
s789 : 5237.9 Seconds

Fixed:
S789 : 2159.76 Seconds

I think that's a fair speed improvement, actually....

boriel wrote:NOTE: This release includes your MLDepacker routine (fastcalled).

Nice! I added that to the library - so there's a link to the packer program in there too. You might want to tweak that to note that it's in the package.
boriel wrote:NOTE2: Happy Birthday!

Thankee Kindly. I'm /really/ getting old now!

Posts: 797

Joined: Mon Apr 27, 2009 7:26 pm

Location: Slough, Berkshire, UK

### Re: Fractal

Should be able to get it faster still using the integer method - which cheats and multiplies up decimals:

DIM xl,yl as long
DIM xstartl,xstepl,ystartl,ystepl as long
DIM xendl,yendl as long
DIM zl,zil,newzl,newzil as long

#DEFINE MULTIPLIER 10000

xstartl=xstart * MULTIPLIER
xendl=xend * MULTIPLIER
ystartl=ystart * MULTIPLIER
yendl=yend * MULTIPLIER
xl = x * MULTIPLIER
yl = y * MULTIPLIER

Though I tried this to abject failure. Anyone else get anywhere?