Programming:Fast Square Root
From CPCWiki - THE Amstrad CPC encyclopedia!
Revision as of 17:34, 4 August 2006 by Octoate (Initial page)
Input: A = The number you want to find the square root of
Output: A = Square root of the number supplied in A
Call: CALL SqrtA
;this routine written 10 - 28 - 2003 ;ported from the 68k version (by Frank Yaul) by konrad meyer ;this routine is not as memory efficient as it could be; this is ;done to save cycles ;note: this routine is using the fastest available method ;and will come within 1 below the # ;note: this routine is inaccurate in #s below 4 SqrtA: LD (Asqr),A SRL A JR DataOver Asqr: .DB 0 Bsqr: .DB 0 Csqr: .DB 0 DataOver: LD (Bsqr),A LD B,A LD (Csqr),A iterate: LD A,(Asqr) LD B,(Bsqr) LD D,A LD E,B divideDbyEreturnA: RL D RLA SUB E JR nc,$+3 ADD A,E LD E,A LD A,D CPL LD B,(Bsqr) ADD A,B SRL A LD (Bsqr),A LD A,(Csqr) DEC A LD B,(Bsqr) CP B JR z,done LD (Csqr),B JR iterate done: LD A,(Bsqr) RET