module Math.EllipticIntegrals.Internal where import Data.Complex ( realPart, Complex(..) ) type Cplx = Complex Double toCplx :: Double -> Cplx toCplx :: Double -> Cplx toCplx Double x = Double x forall a. a -> a -> Complex a :+ Double 0.0 getPhiK :: Cplx -> (Cplx, Int) getPhiK :: Cplx -> (Cplx, Int) getPhiK Cplx phi | forall a. Complex a -> a realPart Cplx phi forall a. Ord a => a -> a -> Bool > forall a. Floating a => a piforall a. Fractional a => a -> a -> a /Double 2 = forall a. (a -> Bool) -> (a -> a) -> a -> a until (\(Cplx x,Int _) -> forall a. Complex a -> a realPart Cplx x forall a. Ord a => a -> a -> Bool <= forall a. Floating a => a piforall a. Fractional a => a -> a -> a /Double 2) (\(Cplx x,Int k) -> (Cplx xforall a. Num a => a -> a -> a -forall a. Floating a => a pi,Int kforall a. Num a => a -> a -> a +Int 1)) (Cplx phi,Int 0) | forall a. Complex a -> a realPart Cplx phi forall a. Ord a => a -> a -> Bool < -forall a. Floating a => a piforall a. Fractional a => a -> a -> a /Double 2 = forall a. (a -> Bool) -> (a -> a) -> a -> a until (\(Cplx x,Int _) -> forall a. Complex a -> a realPart Cplx x forall a. Ord a => a -> a -> Bool >= -forall a. Floating a => a piforall a. Fractional a => a -> a -> a /Double 2) (\(Cplx x,Int k) -> (Cplx xforall a. Num a => a -> a -> a +forall a. Floating a => a pi,Int kforall a. Num a => a -> a -> a -Int 1)) (Cplx phi,Int 0) | Bool otherwise = (Cplx phi,Int 0) atanC :: Cplx -> Cplx atanC :: Cplx -> Cplx atanC Cplx z = Cplx i forall a. Num a => a -> a -> a * (forall a. Floating a => a -> a log(Cplx 1forall a. Num a => a -> a -> a -Cplx iforall a. Num a => a -> a -> a *Cplx z) forall a. Num a => a -> a -> a - forall a. Floating a => a -> a log(Cplx 1forall a. Num a => a -> a -> a +Cplx iforall a. Num a => a -> a -> a *Cplx z)) forall a. Fractional a => a -> a -> a / Cplx 2 where i :: Cplx i = Double 0.0 forall a. a -> a -> Complex a :+ Double 1.0