=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Date: Tue, 15 Feb 2000 16:02:14 From: Nikolai GolovchenkoTo: pic microcontroller discussion list Subject: Re: square root added to Piclist FAQ math routine -------------------------------------------------------------------------------- Hello Scott, I love challenges! This beast is 6 cycles (24%) faster. Square root of 8 bit value has just 16 possible answers. So "brute force" approach helped. This routine is just a list of compares and tree-like branches. By the way, today I read in an elementary math book (Mark Vygodskiy, 1979) that the well known Newton method was actually devised by Heron approximately 2000 years ago.... He didn't even know about decimal fractions, but knew how to take sqare roots The method sounds like: 1) Take an approximate square root of the number 2) Divide number by approximation 3) Calculate mean of division result and approximation 4) Substitute approximation with mean and repeat from step 2 (repeat until the needed precision is reached) Same scheme is applied to cubic root, but division is made twice. ;********************************************************************** ;FAST 8 BIT SQUARE ROOT ; ;Author: Nikolai Golovchenko ;Date: February 15, 2000 ; ;Input and output in w ;ROM - 53 ;RAM - 0 ;Timing - 15..19 cycles including call and return ;********************************************************************** Sqrt8f addlw -64 ;1 skpnc goto sqrt8_15 ;3 addlw (64-16) skpnc goto sqrt4_7 ;6 addlw (16-4) skpnc goto sqrt2_3 ;9 addlw (4-1) skpnc retlw 1 ;1 (15) retlw 0 ;0 (16) sqrt2_3 addlw (4-9) skpnc retlw 3 ;3 (16) retlw 2 ;2 (17) sqrt4_7 addlw (16-36) skpnc goto sqrt6_7 ;10 addlw (36-25) skpnc retlw 5 ;5 (16) retlw 4 ;4 (17) sqrt6_7 addlw (36-49) skpnc retlw 7 ;7 (17) retlw 6 ;6 (18) sqrt8_15 addlw (64-144) skpnc goto sqrt12_15 ;7 addlw (144-100) skpnc goto sqrt10_11 ;10 addlw (100-81) skpnc retlw 9 ;9 (16) retlw 8 ;8 (17) sqrt10_11 addlw (100-121) skpnc retlw 11 ;11 (17) retlw 10 ;10 (18) sqrt12_15 addlw (144-196) skpnc goto sqrt14_15 ;11 addlw (196-169) skpnc retlw 13 ;13 (17) retlw 12 ;12 (18) sqrt14_15 addlw (196-225) skpnc retlw 15 ;15 (18) retlw 14 ;14 (19) ;********************************************************************** Bye, Nikolai On Tuesday, February 15, 2000 Scott Dattalo wrote: > On Mon, 14 Feb 2000, James Newton wrote: >> Nikolai Golovchenko has added Square Root routines to the pic math FAQ at >> http://www.piclist.com/faq >> under Routine / code library, Math, Basic Math > Neeto! >> 8 bit >> http://techref.massmind.org/microchip/math/sqrt/sqrt8 > Challenge: I've got a back-of-the-notebook routine that will perform an > 8-bit square root in a worst case of 25 cycles and a best case 8 cycles. > I'd scribble it now except for the fear of being ostracized for writing > obtuse pic code. Besides, we haven't had a challenge lately! > Scott > ps: James, why you're in the link-all-math-routines-that-have-ever-been- > written-for-a-pic mode, you may want to add: > http://www.dattalo.com/technical/software/pic/picsqrt.html > and the half-baked explanation: > http://www.dattalo.com/technical/theory/sqrt.html