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 WENDci 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