Sinc function

From HaskellWiki
Revision as of 23:46, 14 November 2006 by BrettGiles (talk | contribs) (Mathify 0/0)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

The sinc function, , is a useful function that is a little tricky to implement because it becomes as x approaches . Here is an implementation taken from the Boost library.

epsilon :: RealFloat a => a
epsilon = encodeFloat 1 (fromIntegral $ 1-floatDigits epsilon)

{- Boosted from Boost http://www.boost.org/boost/math/special_functions/sinc.hpp -}
sinc :: (RealFloat a) => a -> a
sinc x | (abs x) >= taylor_n_bound = (sin x)/x
       | otherwise = 1 - (x^2/6) + (x^4/120)
 where
  taylor_n_bound = sqrt $ sqrt epsilon