Changes

Programming:Fast Square Root

776 bytes added, 01:03, 19 September 2007
/* Faster Again */
RET
</pre>
 
== Faster Again ==
 
Since there are only 15 possible results for the square root of an 8 bit number, it's really just a series of comparisons, optimised to use a binary comparison. This routine also leaves all other registers intact:
 
<pre>
SqrtA: CP 8 * 8
JR NC,ge8
CP 4 * 4
JR NC,ge4
CP 2 * 2
JR NC,ge2
OR A
RET Z
LD A,1
RET
ge2: CP 3 * 3
SBC A
ADD 3
RET
ge4: CP 6 * 6
JR NC,ge6
CP 5 * 5
SBC A
ADD 5
RET
ge6: CP 7 * 7
SBC A
ADD 7
RET
ge8: CP 12 * 12
JR NC,ge12
CP 10 * 10
JR NC,ge10
CP 9 * 9
SBC A
ADD 9
RET
ge10: CP 11 * 11
SBC A
ADD 11
RET
ge12: CP 14 * 14
JR NC,ge14
CP 13 * 13
SBC A
ADD 13
RET
ge14: CP 15 * 15
SBC A
ADD 15
RET
</pre>
 
The average time for this routine, including CALL and RET is 26.9us.
 
[[Category:Programming]]
151
edits