 release dev builds extras themes manual wiki device status forums mailing lists IRC bugs patches dev guide

# Rockbox mail archive

Subject: Re: math function for calculator
From: tinousus_at_yahoo.com
Date: 2004-05-03

Woo, really thanks. I use your algorithm and it works like a charm.

Your algorithm is very efficient especially for my program.
I am using scientific number format, the number needed to
find root is always between 0 and 10. I take the midpoint of
operand and 1 as the initial guess. Most of time, it takes less
than 10 repeat. Average is about 5 times! Math is beautiful!

Can you tell me the name of the algorithm?

And do you know the algorithms for other functions like sin,cos,
especially log?

Isaac

------------------ Original Message ------------------

>Try this:
>
>
>V/G = N ... (G+N)/2 = G
>repeat until G=N
>
>
>V = Value (for which we are seeking the root)
>G = most recent Guess
>N = New guess
>
>
>Example for root of V=12 with an arbitrary intial guess of 2
>
>
>find _/12 ... guess 2.000
>12/2.000 = 6.000 ... (2.000+6.000)/2 = 4.000
>12/4.000 = 3.000 ... (4.000+3.000)/2 = 3.500
>12/3.500 = 3.429 ... (3.500+3.429)/2 = 3.465
>12/3.465 = 3.463 ... (3.465+3.463)/2 = 3.464
>12/3.464 = 3.464
>
>
>3.464^2 = 11.999
>
>
>_/12 is irrational, so to get 12 back out of the other end you will need an
>infinite number of digits after the decimal place, hence the result above
>being 11.999, that is because I decided to offer a result to only 3 decimal
>places.
>
>
>Obviously faster methods can be found, but generally you will need to rely
>on the existence of other mathematical functions (such as log-n) or big
>memory-hungry lookup tables - Although for this application where our app
>is 32K end-of-story, a lookup table of 1..2K would not be harmful.
>
>
>One use of a lookup table might be to get a good initial guess...
>With a table of all known integer squares:
>
>
>_/105 lies somewhere between _/100 (=10) and _/121 (=11)
>121 - 100 = 21
>21 / (105-100) = 4.200
>(1) / 4.200 = .238
>
>
>So an initial guess of 10.238 would be reasonable
>
>