Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: C++: Iterointi

jone2712 [08.12.2024 21:05:59]

#

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;
}

jone2712 [03.01.2025 19:28:59]

#

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;
}

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta