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

Physics informed neural network Fukuzono

Visto che puro ML non funziona per le serie tempo di cui mi sto occupando ed le regressioni basate su formule analitiche mostrano dei limiti...