File: sinc.hs

package info (click to toggle)
haskell-math-functions 0.3.4.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,136 kB
  • sloc: haskell: 2,675; python: 121; makefile: 2
file content (33 lines) | stat: -rw-r--r-- 784 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
-- Description of choice of approximation boundaries in sinc function
module Sinc where

import Numeric.MathFunctions.Constants (m_epsilon)


-- Approximations for sinc up to 6th order and "exact" implementation
f2,f4,f6,f :: Double -> Double
f2 x = 1 - x*x/6
f4 x = 1 - x*x/6 + x*x*x*x/120
f6 x = 1 - x*x/6 + x*x*x*x/120 - x*x*x*x*x*x/5040
f  x = sin x / x

-- When next term becomes so small that (1-e)==1 we can neglect it:
e0,e2,e4 :: Double
e0 = sqrt (6 * m_epsilon / 4)
e2 = (30   * m_epsilon) ** (1/4) / 2
e4 = (1260 * m_epsilon) ** (1/6) / 2

test :: IO ()
test = do
  print ("e0",e0)
  print $ f  e0 == 1
  print $ f2 e0 == 1
  --
  print ("e2",e2)
  print $ f  e2 == f2 e2
  print $ f2 e2 == f4 e2
  --
  print ("e4",e4)
  print $ f  e4 == f4 e4
  print $ f4 e4 == f6 e4