mercoledì 23 ottobre 2019

Mandelbrot e lookup table dei quadrati

Questo post deriva dalla lettura di questi due link (1 2)
In pratica oltre all'utilizzo della matematica intera viene calcolata una tabella di lookup dei quadrati dei numeri interi da 0 a 127 in modo che nel ciclo iterativo non si debbano fare i calcoli ma basti recuperare il risultato dalla tabella (la tabella non contiene i quadrati ma i quadrati divisi per il fattore di scala ovvero divisi per 64, operazione che viene effettuata con un bit shift di 6 posizioni)
Con la speranza di fare un porting verso C64 i numeri interi sono compresi da 0 a 65535 con un fattore di scala di 64 (-128 = -2.0, 127=2.0, la tabella dei quadrati non e' necessario che abbia i numeri negativi )


Per evitare di leggere fuori dalla tabella con relativo segmentation fault prima deve essere verifcato che l'indice sia inferiore a 127

---------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>

int quadrati[127];
int zr,zi,a,k;

// base 1 = 64

int main()

{
    // crea matrice dei quadrati
    for (int i=0;i<128;i++){
        quadrati[i] = (i*i)>>6;
            }

    for (int jr=-127; jr<127; jr++)
    {
        for (int ji=-127; ji<127; ji++)
        {
            zi = zr = 0;
            for (k=0; k<=25; k++)
            {
                a = quadrati[abs(zr)] - quadrati[abs(zi)] + jr;
                zi = quadrati[abs(zr)] + quadrati[abs(zi)] - quadrati[abs(zr-zi)] + ji;
                zr = a;
                if ((abs(zi) >126) || (abs(zr)>126))
                    {
                        break;
                    }

                if ((quadrati[abs(zr)]+quadrati[abs(zi)]) > 256)
                    {
                        break;
                    }
            }
            if (k > 24)
                {printf("O");}
                else
                {printf(" ");}

        }
        printf("\n");

    }
    return 0;
}

Nessun commento:

Posta un commento

Dockerizza Flask

Un esempio semplice per inserire in un container Docker una applicazione Flask Partiamo da una semplice applicazione che ha un file app.py ...