mercoledì 16 ottobre 2019

Mandelbrot e moltiplicazioni veloci

Correva l'anno 1988...1989....quando su Le Scienze Italia lessi un articolo Dewdney che spiegava l'insieme di Mandelbrot e l'algoritmo per il calcolo consigliando di non usare il comando basic SQR (per calcolare i quadrati) ma usando X*X perche' per la CPU era piu' veloce effettuare il calcolo



Per caso ho trovato una interessante e semplice miglioramento che riduce la quantita' di moltiplicazioni

il ciclo di calcolo in Basic (Rosetta code)

 WHILE (x * x + y * y <= (2 * 2) AND iteration < maxIteration)
            xtemp = x * x - y * y + x0
            y = 2 * x * y + y0
 
            x = xtemp
 
            iteration = iteration + 1
        WEND
ci sono 6 moltiplicazioni

Un primo miglioramento e' quello di sostituire

X*X + Y*Y +X0 

con

(X+Y)*(X-Y)+X0

riducendo da 2 ad 1 la moltiplicazione.
Per quanto riguarda il controllo della condizione di uscita

(X*X)+(Y*Y) => 4

puo' essere riscritta
ABS(X) + ABS(Y) => 2.82842712 (equivalente a 2*SQRT(2)

per togliere una ulteriore moltiplicazione 2*X*Y puo' essere risulta con un byte shift a sinistra di 1





Nessun commento:

Posta un commento

Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...