Iterointi luuppi vaikka Mandelbrotin joukon laskemiseen. Koodi on optimoitu nopeimpaan kuosiin, vai onko sinulla ideaa, miten luuppiin saisi enemmän tehoa?
/* Jouni Aro 22.2.2000 */ #ifndef __LONG_DOUBLE #define __LONG_DOUBLE typedef long double lreal; #define lr(ex) (lreal)(ex) #endif #define MAX_ITER 256 int iteroi(lreal a, lreal b) { int loop=0; lreal rr=lr(0); lreal x=0, y=0, r, i; while (rr < lr(4096)) { r=x*x; i=y*y; rr=r+i; y=2*x*y+b; x=r-i+a; if (++loop==MAX_ITER) return 0; } return loop; }
Tuossapa on yksinkertainen main-funktio, joka piirtää Mandelbrotin joukon. Kaikki ylimääräinen Windows-paska on ohjelmoitu omaan yksikköön...
/* Jouni Aro 3.1.2025 */ #pragma hdrstop #include <windows.h> #include "exwin.cpp" #include "skaala.cpp" #define MAX_ITER 256 int iteroi(lreal a, lreal b) { int loop=0; lreal rr=lr(0); lreal x=0, y=0, r, i; while (rr < lr(4096)) { r=x*x; i=y*y; rr=r+i; y=2*x*y+b; x=r-i+a; if (++loop==MAX_ITER) return 0; } return loop; } int OwnMain(void) { skaala S; S.set(0, 0, 1024, 1024); // piirto-ikkunan koko S.set(lr(-2), lr(0.8), lr(-1.4), lr(1.4)); // ikkunan skaala for (int x=0; x<1024; x++) for (int y=0; y<1024; y++) { lreal a=S.getxl(x); lreal b=S.getyl(y); int c=iteroi(a, b); putpixel(x, y, RGB(c, c, c)); } waitForEsc(); return 0; }