I don't know if anyone actually answered the question you didn't ask, but you can always improve an inaccurate guess when you need to. A limit will always exist, and should be unique (independent of the initial guess), assuming (+) and (*) are well-conditioned.

In practice, a single first-order Taylor step should be enough:

logBase' :: Double -> Double -> Double
logBase' b y     = if b == 0.0 then 1.0 else improve x0
   where bLogInv = 1.0 / log(b)
         f     x = x + (1.0-b**x/y) * bLogInv

         -- First step is enough, if we guess smartly
         improve = f
         x0      = log(y) * bLogInv

         -- or use the limit from any initial guess
         -- improve x = let y = f x in if y == x then y else improve y
         -- x0      = 0.0

Dan

Roberto wrote:
Hi,
There is a mistake is logBase:

$ ghci
GHCi, version 6.10.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
Prelude> logBase 10 10
1.0
Prelude> logBase 10 100
2.0
Prelude> logBase 10 1000
2.9999999999999996                  <--- eeeerrgghhhh!
Prelude> logBase 10 10000
4.0


My host is a Debian GNU/Linux 5.0.2 (lenny) with the following GHC packages:

ii ghc6 6.10.4-1 ii ghc6-doc 6.10.4-1 ii libghc6-mtl-dev 1.1.0.2-7+b1 ii libghc6-utf8-string-dev 0.3.5-1+b1 ii libghc6-x11-dev 1.4.5-6 rc libghc6-x11-doc 1.4.2-1 ii libghc6-x11-xft-dev 0.3-3+b3 ii libghc6-xmonad-contrib-dev 0.8.1-3+b3 rc libghc6-xmonad-contrib-doc 0.8-2 ii libghc6-xmonad-dev 0.8.1-5
Regards!


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe



_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to