{-# LANGUAGE DeriveDataTypeable #-}{-# LANGUAGE Trustworthy #-}{-# LANGUAGE DeriveGeneric #-}{-# LANGUAGE DeriveTraversable #-}------------------------------------------------------------------------------- |-- Module : Data.Complex-- Copyright : (c) The University of Glasgow 2001-- License : BSD-style (see the file libraries/base/LICENSE)---- Maintainer : libraries@haskell.org-- Stability : provisional-- Portability : portable---- Complex numbers.-------------------------------------------------------------------------------moduleData.Complex (-- * Rectangular formComplex ((:+) ),realPart ,imagPart -- * Polar form,mkPolar ,cis ,polar ,magnitude ,phase -- * Conjugate,conjugate )whereimportPrelude hiding(Applicative (..))importGHC.Internal.Base (Applicative (..))importGHC.Generics (Generic ,Generic1 )importGHC.Internal.Float (Floating (..))importGHC.Internal.Data.Data (Data )importForeign (Storable ,castPtr ,peek ,poke ,pokeElemOff ,peekElemOff ,sizeOf ,alignment )importGHC.Internal.Control.Monad.Fix (MonadFix (..))importControl.Monad.Zip (MonadZip (..))infix6:+ -- $setup-- >>> import Prelude-- ------------------------------------------------------------------------------- The Complex type-- | A data type representing complex numbers.---- You can read about complex numbers [on wikipedia](https://en.wikipedia.org/wiki/Complex_number).---- In haskell, complex numbers are represented as @a :+ b@ which can be thought of-- as representing \(a + bi\). For a complex number @z@, @'abs' z@ is a number with the 'magnitude' of @z@,-- but oriented in the positive real direction, whereas @'signum' z@-- has the 'phase' of @z@, but unit 'magnitude'.-- Apart from the loss of precision due to IEEE754 floating point numbers,-- it holds that @z == 'abs' z * 'signum' z@.---- Note that `Complex`'s instances inherit the deficiencies from the type-- parameter's. For example, @Complex Float@'s 'Eq' instance has similar-- problems to `Float`'s.---- As can be seen in the examples, the 'Foldable'-- and 'Traversable' instances traverse the real part first.---- ==== __Examples__---- >>> (5.0 :+ 2.5) + 6.5-- 11.5 :+ 2.5---- >>> abs (1.0 :+ 1.0) - sqrt 2.0-- 0.0 :+ 0.0---- >>> abs (signum (4.0 :+ 3.0))-- 1.0 :+ 0.0---- >>> foldr (:) [] (1 :+ 2)-- [1,2]---- >>> mapM print (1 :+ 2)-- 1-- 2-- () :+ ()dataComplex a =!a :+ !a -- ^ forms a complex number from its real and imaginary-- rectangular components.deriving(Complex a -> Complex a -> Bool
(Complex a -> Complex a -> Bool)
-> (Complex a -> Complex a -> Bool) -> Eq (Complex a)
forall a. Eq a => Complex a -> Complex a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => Complex a -> Complex a -> Bool
== :: Complex a -> Complex a -> Bool
$c/= :: forall a. Eq a => Complex a -> Complex a -> Bool
/= :: Complex a -> Complex a -> Bool
Eq -- ^ @since 2.01,Int -> Complex a -> ShowS
[Complex a] -> ShowS
Complex a -> String
(Int -> Complex a -> ShowS)
-> (Complex a -> String)
-> ([Complex a] -> ShowS)
-> Show (Complex a)
forall a. Show a => Int -> Complex a -> ShowS
forall a. Show a => [Complex a] -> ShowS
forall a. Show a => Complex a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> Complex a -> ShowS
showsPrec :: Int -> Complex a -> ShowS
$cshow :: forall a. Show a => Complex a -> String
show :: Complex a -> String
$cshowList :: forall a. Show a => [Complex a] -> ShowS
showList :: [Complex a] -> ShowS
Show -- ^ @since 2.01,ReadPrec [Complex a]
ReadPrec (Complex a)
Int -> ReadS (Complex a)
ReadS [Complex a]
(Int -> ReadS (Complex a))
-> ReadS [Complex a]
-> ReadPrec (Complex a)
-> ReadPrec [Complex a]
-> Read (Complex a)
forall a. Read a => ReadPrec [Complex a]
forall a. Read a => ReadPrec (Complex a)
forall a. Read a => Int -> ReadS (Complex a)
forall a. Read a => ReadS [Complex a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: forall a. Read a => Int -> ReadS (Complex a)
readsPrec :: Int -> ReadS (Complex a)
$creadList :: forall a. Read a => ReadS [Complex a]
readList :: ReadS [Complex a]
$creadPrec :: forall a. Read a => ReadPrec (Complex a)
readPrec :: ReadPrec (Complex a)
$creadListPrec :: forall a. Read a => ReadPrec [Complex a]
readListPrec :: ReadPrec [Complex a]
Read -- ^ @since 2.01,Typeable (Complex a)
Typeable (Complex a) =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> Complex a -> c (Complex a))
-> (forall (c :: * -> *).
 (forall b r. Data b => c (b -> r) -> c r)
 -> (forall r. r -> c r) -> Constr -> c (Complex a))
-> (Complex a -> Constr)
-> (Complex a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
 Typeable t =>
 (forall d. Data d => c (t d)) -> Maybe (c (Complex a)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
 Typeable t =>
 (forall d e. (Data d, Data e) => c (t d e))
 -> Maybe (c (Complex a)))
-> ((forall b. Data b => b -> b) -> Complex a -> Complex a)
-> (forall r r'.
 (r -> r' -> r)
 -> r -> (forall d. Data d => d -> r') -> Complex a -> r)
-> (forall r r'.
 (r' -> r -> r)
 -> r -> (forall d. Data d => d -> r') -> Complex a -> r)
-> (forall u. (forall d. Data d => d -> u) -> Complex a -> [u])
-> (forall u.
 Int -> (forall d. Data d => d -> u) -> Complex a -> u)
-> (forall (m :: * -> *).
 Monad m =>
 (forall d. Data d => d -> m d) -> Complex a -> m (Complex a))
-> (forall (m :: * -> *).
 MonadPlus m =>
 (forall d. Data d => d -> m d) -> Complex a -> m (Complex a))
-> (forall (m :: * -> *).
 MonadPlus m =>
 (forall d. Data d => d -> m d) -> Complex a -> m (Complex a))
-> Data (Complex a)
Complex a -> Constr
Complex a -> DataType
(forall b. Data b => b -> b) -> Complex a -> Complex a
forall a. Data a => Typeable (Complex a)
forall a. Data a => Complex a -> Constr
forall a. Data a => Complex a -> DataType
forall a.
Data a =>
(forall b. Data b => b -> b) -> Complex a -> Complex a
forall a u.
Data a =>
Int -> (forall d. Data d => d -> u) -> Complex a -> u
forall a u.
Data a =>
(forall d. Data d => d -> u) -> Complex a -> [u]
forall a r r'.
Data a =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Complex a -> r
forall a r r'.
Data a =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Complex a -> r
forall a (m :: * -> *).
(Data a, Monad m) =>
(forall d. Data d => d -> m d) -> Complex a -> m (Complex a)
forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Complex a -> m (Complex a)
forall a (c :: * -> *).
Data a =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Complex a)
forall a (c :: * -> *).
Data a =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Complex a -> c (Complex a)
forall a (t :: * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Complex a))
forall a (t :: * -> * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Complex a))
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
 (forall b r. Data b => c (b -> r) -> c r)
 -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
 Typeable t =>
 (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
 Typeable t =>
 (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
 (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
 (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
 Monad m =>
 (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
 MonadPlus m =>
 (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
 MonadPlus m =>
 (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Complex a -> u
forall u. (forall d. Data d => d -> u) -> Complex a -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Complex a -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Complex a -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Complex a -> m (Complex a)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Complex a -> m (Complex a)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Complex a)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Complex a -> c (Complex a)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Complex a))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Complex a))
$cgfoldl :: forall a (c :: * -> *).
Data a =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Complex a -> c (Complex a)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Complex a -> c (Complex a)
$cgunfold :: forall a (c :: * -> *).
Data a =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Complex a)
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Complex a)
$ctoConstr :: forall a. Data a => Complex a -> Constr
toConstr :: Complex a -> Constr
$cdataTypeOf :: forall a. Data a => Complex a -> DataType
dataTypeOf :: Complex a -> DataType
$cdataCast1 :: forall a (t :: * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Complex a))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Complex a))
$cdataCast2 :: forall a (t :: * -> * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Complex a))
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (Complex a))
$cgmapT :: forall a.
Data a =>
(forall b. Data b => b -> b) -> Complex a -> Complex a
gmapT :: (forall b. Data b => b -> b) -> Complex a -> Complex a
$cgmapQl :: forall a r r'.
Data a =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Complex a -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Complex a -> r
$cgmapQr :: forall a r r'.
Data a =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Complex a -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Complex a -> r
$cgmapQ :: forall a u.
Data a =>
(forall d. Data d => d -> u) -> Complex a -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> Complex a -> [u]
$cgmapQi :: forall a u.
Data a =>
Int -> (forall d. Data d => d -> u) -> Complex a -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Complex a -> u
$cgmapM :: forall a (m :: * -> *).
(Data a, Monad m) =>
(forall d. Data d => d -> m d) -> Complex a -> m (Complex a)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Complex a -> m (Complex a)
$cgmapMp :: forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Complex a -> m (Complex a)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Complex a -> m (Complex a)
$cgmapMo :: forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Complex a -> m (Complex a)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Complex a -> m (Complex a)
Data -- ^ @since 2.01,(forall x. Complex a -> Rep (Complex a) x)
-> (forall x. Rep (Complex a) x -> Complex a)
-> Generic (Complex a)
forall x. Rep (Complex a) x -> Complex a
forall x. Complex a -> Rep (Complex a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Complex a) x -> Complex a
forall a x. Complex a -> Rep (Complex a) x
$cfrom :: forall a x. Complex a -> Rep (Complex a) x
from :: forall x. Complex a -> Rep (Complex a) x
$cto :: forall a x. Rep (Complex a) x -> Complex a
to :: forall x. Rep (Complex a) x -> Complex a
Generic -- ^ @since 4.9.0.0,(forall a. Complex a -> Rep1 Complex a)
-> (forall a. Rep1 Complex a -> Complex a) -> Generic1 Complex
forall a. Rep1 Complex a -> Complex a
forall a. Complex a -> Rep1 Complex a
forall k (f :: k -> *).
(forall (a :: k). f a -> Rep1 f a)
-> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f
$cfrom1 :: forall a. Complex a -> Rep1 Complex a
from1 :: forall a. Complex a -> Rep1 Complex a
$cto1 :: forall a. Rep1 Complex a -> Complex a
to1 :: forall a. Rep1 Complex a -> Complex a
Generic1 -- ^ @since 4.9.0.0,(forall a b. (a -> b) -> Complex a -> Complex b)
-> (forall a b. a -> Complex b -> Complex a) -> Functor Complex
forall a b. a -> Complex b -> Complex a
forall a b. (a -> b) -> Complex a -> Complex b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> Complex a -> Complex b
fmap :: forall a b. (a -> b) -> Complex a -> Complex b
$c<$ :: forall a b. a -> Complex b -> Complex a
<$ :: forall a b. a -> Complex b -> Complex a
Functor -- ^ @since 4.9.0.0,(forall m. Monoid m => Complex m -> m)
-> (forall m a. Monoid m => (a -> m) -> Complex a -> m)
-> (forall m a. Monoid m => (a -> m) -> Complex a -> m)
-> (forall a b. (a -> b -> b) -> b -> Complex a -> b)
-> (forall a b. (a -> b -> b) -> b -> Complex a -> b)
-> (forall b a. (b -> a -> b) -> b -> Complex a -> b)
-> (forall b a. (b -> a -> b) -> b -> Complex a -> b)
-> (forall a. (a -> a -> a) -> Complex a -> a)
-> (forall a. (a -> a -> a) -> Complex a -> a)
-> (forall a. Complex a -> [a])
-> (forall a. Complex a -> Bool)
-> (forall a. Complex a -> Int)
-> (forall a. Eq a => a -> Complex a -> Bool)
-> (forall a. Ord a => Complex a -> a)
-> (forall a. Ord a => Complex a -> a)
-> (forall a. Num a => Complex a -> a)
-> (forall a. Num a => Complex a -> a)
-> Foldable Complex
forall a. Eq a => a -> Complex a -> Bool
forall a. Num a => Complex a -> a
forall a. Ord a => Complex a -> a
forall m. Monoid m => Complex m -> m
forall a. Complex a -> Bool
forall a. Complex a -> Int
forall a. Complex a -> [a]
forall a. (a -> a -> a) -> Complex a -> a
forall m a. Monoid m => (a -> m) -> Complex a -> m
forall b a. (b -> a -> b) -> b -> Complex a -> b
forall a b. (a -> b -> b) -> b -> Complex a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
$cfold :: forall m. Monoid m => Complex m -> m
fold :: forall m. Monoid m => Complex m -> m
$cfoldMap :: forall m a. Monoid m => (a -> m) -> Complex a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> Complex a -> m
$cfoldMap' :: forall m a. Monoid m => (a -> m) -> Complex a -> m
foldMap' :: forall m a. Monoid m => (a -> m) -> Complex a -> m
$cfoldr :: forall a b. (a -> b -> b) -> b -> Complex a -> b
foldr :: forall a b. (a -> b -> b) -> b -> Complex a -> b
$cfoldr' :: forall a b. (a -> b -> b) -> b -> Complex a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> Complex a -> b
$cfoldl :: forall b a. (b -> a -> b) -> b -> Complex a -> b
foldl :: forall b a. (b -> a -> b) -> b -> Complex a -> b
$cfoldl' :: forall b a. (b -> a -> b) -> b -> Complex a -> b
foldl' :: forall b a. (b -> a -> b) -> b -> Complex a -> b
$cfoldr1 :: forall a. (a -> a -> a) -> Complex a -> a
foldr1 :: forall a. (a -> a -> a) -> Complex a -> a
$cfoldl1 :: forall a. (a -> a -> a) -> Complex a -> a
foldl1 :: forall a. (a -> a -> a) -> Complex a -> a
$ctoList :: forall a. Complex a -> [a]
toList :: forall a. Complex a -> [a]
$cnull :: forall a. Complex a -> Bool
null :: forall a. Complex a -> Bool
$clength :: forall a. Complex a -> Int
length :: forall a. Complex a -> Int
$celem :: forall a. Eq a => a -> Complex a -> Bool
elem :: forall a. Eq a => a -> Complex a -> Bool
$cmaximum :: forall a. Ord a => Complex a -> a
maximum :: forall a. Ord a => Complex a -> a
$cminimum :: forall a. Ord a => Complex a -> a
minimum :: forall a. Ord a => Complex a -> a
$csum :: forall a. Num a => Complex a -> a
sum :: forall a. Num a => Complex a -> a
$cproduct :: forall a. Num a => Complex a -> a
product :: forall a. Num a => Complex a -> a
Foldable -- ^ @since 4.9.0.0,Functor Complex
Foldable Complex
(Functor Complex, Foldable Complex) =>
(forall (f :: * -> *) a b.
 Applicative f =>
 (a -> f b) -> Complex a -> f (Complex b))
-> (forall (f :: * -> *) a.
 Applicative f =>
 Complex (f a) -> f (Complex a))
-> (forall (m :: * -> *) a b.
 Monad m =>
 (a -> m b) -> Complex a -> m (Complex b))
-> (forall (m :: * -> *) a.
 Monad m =>
 Complex (m a) -> m (Complex a))
-> Traversable Complex
forall (t :: * -> *).
(Functor t, Foldable t) =>
(forall (f :: * -> *) a b.
 Applicative f =>
 (a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
 Monad m =>
 (a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (m :: * -> *) a. Monad m => Complex (m a) -> m (Complex a)
forall (f :: * -> *) a.
Applicative f =>
Complex (f a) -> f (Complex a)
forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Complex a -> m (Complex b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Complex a -> f (Complex b)
$ctraverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Complex a -> f (Complex b)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Complex a -> f (Complex b)
$csequenceA :: forall (f :: * -> *) a.
Applicative f =>
Complex (f a) -> f (Complex a)
sequenceA :: forall (f :: * -> *) a.
Applicative f =>
Complex (f a) -> f (Complex a)
$cmapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Complex a -> m (Complex b)
mapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Complex a -> m (Complex b)
$csequence :: forall (m :: * -> *) a. Monad m => Complex (m a) -> m (Complex a)
sequence :: forall (m :: * -> *) a. Monad m => Complex (m a) -> m (Complex a)
Traversable -- ^ @since 4.9.0.0)-- ------------------------------------------------------------------------------- Functions over Complex-- | Extracts the real part of a complex number.---- ==== __Examples__---- >>> realPart (5.0 :+ 3.0)-- 5.0---- >>> realPart ((5.0 :+ 3.0) * (2.0 :+ 3.0))-- 1.0realPart ::Complex a ->a realPart :: forall a. Complex a -> a
realPart (a
x :+ a
_)=a
x -- | Extracts the imaginary part of a complex number.---- ==== __Examples__---- >>> imagPart (5.0 :+ 3.0)-- 3.0---- >>> imagPart ((5.0 :+ 3.0) * (2.0 :+ 3.0))-- 21.0imagPart ::Complex a ->a imagPart :: forall a. Complex a -> a
imagPart (a
_:+ a
y )=a
y -- | The 'conjugate' of a complex number.---- prop> conjugate (conjugate x) = x---- ==== __Examples__---- >>> conjugate (3.0 :+ 3.0)-- 3.0 :+ (-3.0)---- >>> conjugate ((3.0 :+ 3.0) * (2.0 :+ 2.0))-- 0.0 :+ (-12.0){-# SPECIALISEconjugate ::Complex Double ->Complex Double #-}conjugate ::Num a =>Complex a ->Complex a conjugate :: forall a. Num a => Complex a -> Complex a
conjugate (a
x :+ a
y )=a
x a -> a -> Complex a
forall a. a -> a -> Complex a
:+ (-a
y )-- | Form a complex number from 'polar' components of 'magnitude' and 'phase'.---- ==== __Examples__---- >>> mkPolar 1 (pi / 4)-- 0.7071067811865476 :+ 0.7071067811865475---- >>> mkPolar 1 0-- 1.0 :+ 0.0{-# SPECIALISEmkPolar ::Double ->Double ->Complex Double #-}mkPolar ::Floating a =>a ->a ->Complex a mkPolar :: forall a. Floating a => a -> a -> Complex a
mkPolar a
r a
theta =a
r a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
cos a
theta a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
r a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
sin a
theta -- | @'cis' t@ is a complex value with 'magnitude' @1@-- and 'phase' @t@ (modulo @2*'pi'@).---- @-- 'cis' = 'mkPolar' 1-- @---- ==== __Examples__---- >>> cis 0-- 1.0 :+ 0.0---- The following examples are not perfectly zero due to [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754)---- >>> cis pi-- (-1.0) :+ 1.2246467991473532e-16---- >>> cis (4 * pi) - cis (2 * pi)-- 0.0 :+ (-2.4492935982947064e-16){-# SPECIALISEcis ::Double ->Complex Double #-}cis ::Floating a =>a ->Complex a cis :: forall a. Floating a => a -> Complex a
cis a
theta =a -> a
forall a. Floating a => a -> a
cos a
theta a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a -> a
forall a. Floating a => a -> a
sin a
theta -- | The function 'polar' takes a complex number and-- returns a ('magnitude', 'phase') pair in canonical form:-- the 'magnitude' is non-negative, and the 'phase' in the range @(-'pi', 'pi']@;-- if the 'magnitude' is zero, then so is the 'phase'.---- @'polar' z = ('magnitude' z, 'phase' z)@---- ==== __Examples__---- >>> polar (1.0 :+ 1.0)-- (1.4142135623730951,0.7853981633974483)---- >>> polar ((-1.0) :+ 0.0)-- (1.0,3.141592653589793)---- >>> polar (0.0 :+ 0.0)-- (0.0,0.0){-# SPECIALISEpolar ::Complex Double ->(Double ,Double )#-}polar ::(RealFloat a )=>Complex a ->(a ,a )polar :: forall a. RealFloat a => Complex a -> (a, a)
polar Complex a
z =(Complex a -> a
forall a. RealFloat a => Complex a -> a
magnitude Complex a
z ,Complex a -> a
forall a. RealFloat a => Complex a -> a
phase Complex a
z )-- | The non-negative 'magnitude' of a complex number.---- ==== __Examples__---- >>> magnitude (1.0 :+ 1.0)-- 1.4142135623730951---- >>> magnitude (1.0 + 0.0)-- 1.0---- >>> magnitude (0.0 :+ (-5.0))-- 5.0{-# SPECIALISEmagnitude ::Complex Double ->Double #-}magnitude ::(RealFloat a )=>Complex a ->a magnitude :: forall a. RealFloat a => Complex a -> a
magnitude (a
x :+ a
y )=Int -> a -> a
forall a. RealFloat a => Int -> a -> a
scaleFloat Int
k (a -> a
forall a. Floating a => a -> a
sqrt (a -> a
forall {a}. Num a => a -> a
sqr (Int -> a -> a
forall a. RealFloat a => Int -> a -> a
scaleFloat Int
mk a
x )a -> a -> a
forall a. Num a => a -> a -> a
+ a -> a
forall {a}. Num a => a -> a
sqr (Int -> a -> a
forall a. RealFloat a => Int -> a -> a
scaleFloat Int
mk a
y )))wherek :: Int
k =Int -> Int -> Int
forall a. Ord a => a -> a -> a
max (a -> Int
forall a. RealFloat a => a -> Int
exponent a
x )(a -> Int
forall a. RealFloat a => a -> Int
exponent a
y )mk :: Int
mk =-Int
k sqr :: a -> a
sqr a
z =a
z a -> a -> a
forall a. Num a => a -> a -> a
* a
z -- | The 'phase' of a complex number, in the range @(-'pi', 'pi']@.-- If the 'magnitude' is zero, then so is the 'phase'.---- ==== __Examples__---- >>> phase (0.5 :+ 0.5) / pi-- 0.25---- >>> phase (0 :+ 4) / pi-- 0.5{-# SPECIALISEphase ::Complex Double ->Double #-}phase ::(RealFloat a )=>Complex a ->a phase :: forall a. RealFloat a => Complex a -> a
phase (a
0:+ a
0)=a
0-- SLPJ July 97 from John Petersonphase (a
x :+ a
y )=a -> a -> a
forall a. RealFloat a => a -> a -> a
atan2 a
y a
x -- ------------------------------------------------------------------------------- Instances of Complex-- | @since 2.01instance(RealFloat a )=>Num (Complex a )where{-# SPECIALISEinstanceNum (Complex Float )#-}{-# SPECIALISEinstanceNum (Complex Double )#-}(a
x :+ a
y )+ :: Complex a -> Complex a -> Complex a
+ (a
x' :+ a
y' )=(a
x a -> a -> a
forall a. Num a => a -> a -> a
+ a
x' )a -> a -> Complex a
forall a. a -> a -> Complex a
:+ (a
y a -> a -> a
forall a. Num a => a -> a -> a
+ a
y' )(a
x :+ a
y )- :: Complex a -> Complex a -> Complex a
- (a
x' :+ a
y' )=(a
x a -> a -> a
forall a. Num a => a -> a -> a
- a
x' )a -> a -> Complex a
forall a. a -> a -> Complex a
:+ (a
y a -> a -> a
forall a. Num a => a -> a -> a
- a
y' )(a
x :+ a
y )* :: Complex a -> Complex a -> Complex a
* (a
x' :+ a
y' )=(a
x a -> a -> a
forall a. Num a => a -> a -> a
* a
x' a -> a -> a
forall a. Num a => a -> a -> a
- a
y a -> a -> a
forall a. Num a => a -> a -> a
* a
y' )a -> a -> Complex a
forall a. a -> a -> Complex a
:+ (a
x a -> a -> a
forall a. Num a => a -> a -> a
* a
y' a -> a -> a
forall a. Num a => a -> a -> a
+ a
y a -> a -> a
forall a. Num a => a -> a -> a
* a
x' )negate :: Complex a -> Complex a
negate (a
x :+ a
y )=a -> a
forall {a}. Num a => a -> a
negate a
x a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a -> a
forall {a}. Num a => a -> a
negate a
y abs :: Complex a -> Complex a
abs Complex a
z =Complex a -> a
forall a. RealFloat a => Complex a -> a
magnitude Complex a
z a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
0signum :: Complex a -> Complex a
signum (a
0:+ a
0)=Complex a
0signum z :: Complex a
z @(a
x :+ a
y )=a
x a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
r a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
y a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
r wherer :: a
r =Complex a -> a
forall a. RealFloat a => Complex a -> a
magnitude Complex a
z fromInteger :: Integer -> Complex a
fromInteger Integer
n =Integer -> a
forall a. Num a => Integer -> a
fromInteger Integer
n a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
0-- | @since 2.01instance(RealFloat a )=>Fractional (Complex a )where{-# SPECIALISEinstanceFractional (Complex Float )#-}{-# SPECIALISEinstanceFractional (Complex Double )#-}(a
x :+ a
y )/ :: Complex a -> Complex a -> Complex a
/ (a
x' :+ a
y' )=(a
x a -> a -> a
forall a. Num a => a -> a -> a
* a
x'' a -> a -> a
forall a. Num a => a -> a -> a
+ a
y a -> a -> a
forall a. Num a => a -> a -> a
* a
y'' )a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
d a -> a -> Complex a
forall a. a -> a -> Complex a
:+ (a
y a -> a -> a
forall a. Num a => a -> a -> a
* a
x'' a -> a -> a
forall a. Num a => a -> a -> a
- a
x a -> a -> a
forall a. Num a => a -> a -> a
* a
y'' )a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
d wherex'' :: a
x'' =Int -> a -> a
forall a. RealFloat a => Int -> a -> a
scaleFloat Int
k a
x' y'' :: a
y'' =Int -> a -> a
forall a. RealFloat a => Int -> a -> a
scaleFloat Int
k a
y' k :: Int
k =-Int -> Int -> Int
forall a. Ord a => a -> a -> a
max (a -> Int
forall a. RealFloat a => a -> Int
exponent a
x' )(a -> Int
forall a. RealFloat a => a -> Int
exponent a
y' )d :: a
d =a
x' a -> a -> a
forall a. Num a => a -> a -> a
* a
x'' a -> a -> a
forall a. Num a => a -> a -> a
+ a
y' a -> a -> a
forall a. Num a => a -> a -> a
* a
y'' fromRational :: Rational -> Complex a
fromRational Rational
a =Rational -> a
forall a. Fractional a => Rational -> a
fromRational Rational
a a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
0-- | @since 2.01instance(RealFloat a )=>Floating (Complex a )where{-# SPECIALISEinstanceFloating (Complex Float )#-}{-# SPECIALISEinstanceFloating (Complex Double )#-}pi :: Complex a
pi =a
forall a. Floating a => a
pi a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
0exp :: Complex a -> Complex a
exp (a
x :+ a
y )=a
expx a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
cos a
y a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
expx a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
sin a
y whereexpx :: a
expx =a -> a
forall a. Floating a => a -> a
exp a
x log :: Complex a -> Complex a
log Complex a
z =a -> a
forall a. Floating a => a -> a
log (Complex a -> a
forall a. RealFloat a => Complex a -> a
magnitude Complex a
z )a -> a -> Complex a
forall a. a -> a -> Complex a
:+ Complex a -> a
forall a. RealFloat a => Complex a -> a
phase Complex a
z Complex a
x ** :: Complex a -> Complex a -> Complex a
** Complex a
y =case(Complex a
x ,Complex a
y )of(Complex a
_,(a
0:+ a
0))->a
1a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
0((a
0:+ a
0),(a
exp_re :+ a
_))->casea -> a -> Ordering
forall a. Ord a => a -> a -> Ordering
compare a
exp_re a
0ofOrdering
GT ->a
0a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
0Ordering
LT ->a
inf a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
0Ordering
EQ ->a
nan a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
nan ((a
re :+ a
im ),(a
exp_re :+ a
_))|(a -> Bool
forall a. RealFloat a => a -> Bool
isInfinite a
re Bool -> Bool -> Bool
|| a -> Bool
forall a. RealFloat a => a -> Bool
isInfinite a
im )->casea -> a -> Ordering
forall a. Ord a => a -> a -> Ordering
compare a
exp_re a
0ofOrdering
GT ->a
inf a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
0Ordering
LT ->a
0a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
0Ordering
EQ ->a
nan a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
nan |Bool
otherwise ->Complex a -> Complex a
forall a. Floating a => a -> a
exp (Complex a -> Complex a
forall a. Floating a => a -> a
log Complex a
x Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
* Complex a
y )whereinf :: a
inf =a
1a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
0nan :: a
nan =a
0a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
0sqrt :: Complex a -> Complex a
sqrt (a
0:+ a
0)=Complex a
0sqrt z :: Complex a
z @(a
x :+ a
y )=a
u a -> a -> Complex a
forall a. a -> a -> Complex a
:+ (ifa
y a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< a
0then-a
v elsea
v )where(a
u ,a
v )=ifa
x a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< a
0then(a
v' ,a
u' )else(a
u' ,a
v' )v' :: a
v' =a -> a
forall {a}. Num a => a -> a
abs a
y a -> a -> a
forall a. Fractional a => a -> a -> a
/ (a
u' a -> a -> a
forall a. Num a => a -> a -> a
* a
2)u' :: a
u' =a -> a
forall a. Floating a => a -> a
sqrt ((Complex a -> a
forall a. RealFloat a => Complex a -> a
magnitude Complex a
z a -> a -> a
forall a. Num a => a -> a -> a
+ a -> a
forall {a}. Num a => a -> a
abs a
x )a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
2)sin :: Complex a -> Complex a
sin (a
x :+ a
y )=a -> a
forall a. Floating a => a -> a
sin a
x a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
cosh a
y a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a -> a
forall a. Floating a => a -> a
cos a
x a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
sinh a
y cos :: Complex a -> Complex a
cos (a
x :+ a
y )=a -> a
forall a. Floating a => a -> a
cos a
x a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
cosh a
y a -> a -> Complex a
forall a. a -> a -> Complex a
:+ (-a -> a
forall a. Floating a => a -> a
sin a
x a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
sinh a
y )tan :: Complex a -> Complex a
tan (a
x :+ a
y )=(a
sinx a -> a -> a
forall a. Num a => a -> a -> a
* a
coshy a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
cosx a -> a -> a
forall a. Num a => a -> a -> a
* a
sinhy )Complex a -> Complex a -> Complex a
forall a. Fractional a => a -> a -> a
/ (a
cosx a -> a -> a
forall a. Num a => a -> a -> a
* a
coshy a -> a -> Complex a
forall a. a -> a -> Complex a
:+ (-a
sinx a -> a -> a
forall a. Num a => a -> a -> a
* a
sinhy ))wheresinx :: a
sinx =a -> a
forall a. Floating a => a -> a
sin a
x cosx :: a
cosx =a -> a
forall a. Floating a => a -> a
cos a
x sinhy :: a
sinhy =a -> a
forall a. Floating a => a -> a
sinh a
y coshy :: a
coshy =a -> a
forall a. Floating a => a -> a
cosh a
y sinh :: Complex a -> Complex a
sinh (a
x :+ a
y )=a -> a
forall a. Floating a => a -> a
cos a
y a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
sinh a
x a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a -> a
forall a. Floating a => a -> a
sin a
y a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
cosh a
x cosh :: Complex a -> Complex a
cosh (a
x :+ a
y )=a -> a
forall a. Floating a => a -> a
cos a
y a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
cosh a
x a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a -> a
forall a. Floating a => a -> a
sin a
y a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
sinh a
x tanh :: Complex a -> Complex a
tanh (a
x :+ a
y )=(a
cosy a -> a -> a
forall a. Num a => a -> a -> a
* a
sinhx a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
siny a -> a -> a
forall a. Num a => a -> a -> a
* a
coshx )Complex a -> Complex a -> Complex a
forall a. Fractional a => a -> a -> a
/ (a
cosy a -> a -> a
forall a. Num a => a -> a -> a
* a
coshx a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
siny a -> a -> a
forall a. Num a => a -> a -> a
* a
sinhx )wheresiny :: a
siny =a -> a
forall a. Floating a => a -> a
sin a
y cosy :: a
cosy =a -> a
forall a. Floating a => a -> a
cos a
y sinhx :: a
sinhx =a -> a
forall a. Floating a => a -> a
sinh a
x coshx :: a
coshx =a -> a
forall a. Floating a => a -> a
cosh a
x asin :: Complex a -> Complex a
asin z :: Complex a
z @(a
x :+ a
y )=a
y' a -> a -> Complex a
forall a. a -> a -> Complex a
:+ (-a
x' )where(a
x' :+ a
y' )=Complex a -> Complex a
forall a. Floating a => a -> a
log (((-a
y )a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
x )Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
+ Complex a -> Complex a
forall a. Floating a => a -> a
sqrt (Complex a
1Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
- Complex a
z Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
* Complex a
z ))acos :: Complex a -> Complex a
acos Complex a
z =a
y'' a -> a -> Complex a
forall a. a -> a -> Complex a
:+ (-a
x'' )where(a
x'' :+ a
y'' )=Complex a -> Complex a
forall a. Floating a => a -> a
log (Complex a
z Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
+ ((-a
y' )a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
x' ))(a
x' :+ a
y' )=Complex a -> Complex a
forall a. Floating a => a -> a
sqrt (Complex a
1Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
- Complex a
z Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
* Complex a
z )atan :: Complex a -> Complex a
atan z :: Complex a
z @(a
x :+ a
y )=a
y' a -> a -> Complex a
forall a. a -> a -> Complex a
:+ (-a
x' )where(a
x' :+ a
y' )=Complex a -> Complex a
forall a. Floating a => a -> a
log (((a
1a -> a -> a
forall a. Num a => a -> a -> a
- a
y )a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
x )Complex a -> Complex a -> Complex a
forall a. Fractional a => a -> a -> a
/ Complex a -> Complex a
forall a. Floating a => a -> a
sqrt (Complex a
1Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
+ Complex a
z Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
* Complex a
z ))asinh :: Complex a -> Complex a
asinh Complex a
z =Complex a -> Complex a
forall a. Floating a => a -> a
log (Complex a
z Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
+ Complex a -> Complex a
forall a. Floating a => a -> a
sqrt (Complex a
1Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
+ Complex a
z Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
* Complex a
z ))-- Take care to allow (-1)::Complex, fixing #8532acosh :: Complex a -> Complex a
acosh Complex a
z =Complex a -> Complex a
forall a. Floating a => a -> a
log (Complex a
z Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
+ (Complex a -> Complex a
forall a. Floating a => a -> a
sqrt (Complex a -> Complex a) -> Complex a -> Complex a
forall a b. (a -> b) -> a -> b
$ Complex a
z Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
+ Complex a
1)Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
* (Complex a -> Complex a
forall a. Floating a => a -> a
sqrt (Complex a -> Complex a) -> Complex a -> Complex a
forall a b. (a -> b) -> a -> b
$ Complex a
z Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
- Complex a
1))atanh :: Complex a -> Complex a
atanh Complex a
z =Complex a
0.5Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
* Complex a -> Complex a
forall a. Floating a => a -> a
log ((Complex a
1.0Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
+ Complex a
z )Complex a -> Complex a -> Complex a
forall a. Fractional a => a -> a -> a
/ (Complex a
1.0Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
- Complex a
z ))log1p :: Complex a -> Complex a
log1p x :: Complex a
x @(a
a :+ a
b )|a -> a
forall {a}. Num a => a -> a
abs a
a a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< a
0.5Bool -> Bool -> Bool
&& a -> a
forall {a}. Num a => a -> a
abs a
b a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< a
0.5,a
u <-a
2a -> a -> a
forall a. Num a => a -> a -> a
* a
a a -> a -> a
forall a. Num a => a -> a -> a
+ a
a a -> a -> a
forall a. Num a => a -> a -> a
* a
a a -> a -> a
forall a. Num a => a -> a -> a
+ a
b a -> a -> a
forall a. Num a => a -> a -> a
* a
b =a -> a
forall a. Floating a => a -> a
log1p (a
u a -> a -> a
forall a. Fractional a => a -> a -> a
/ (a
1a -> a -> a
forall a. Num a => a -> a -> a
+ a -> a
forall a. Floating a => a -> a
sqrt (a
u a -> a -> a
forall a. Num a => a -> a -> a
+ a
1)))a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a -> a -> a
forall a. RealFloat a => a -> a -> a
atan2 (a
1a -> a -> a
forall a. Num a => a -> a -> a
+ a
a )a
b |Bool
otherwise =Complex a -> Complex a
forall a. Floating a => a -> a
log (Complex a
1Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
+ Complex a
x ){-# INLINElog1p #-}expm1 :: Complex a -> Complex a
expm1 x :: Complex a
x @(a
a :+ a
b )|a
a a -> a -> a
forall a. Num a => a -> a -> a
* a
a a -> a -> a
forall a. Num a => a -> a -> a
+ a
b a -> a -> a
forall a. Num a => a -> a -> a
* a
b a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< a
1,a
u <-a -> a
forall a. Floating a => a -> a
expm1 a
a ,a
v <-a -> a
forall a. Floating a => a -> a
sin (a
b a -> a -> a
forall a. Fractional a => a -> a -> a
/ a
2),a
w <--a
2a -> a -> a
forall a. Num a => a -> a -> a
* a
v a -> a -> a
forall a. Num a => a -> a -> a
* a
v =(a
u a -> a -> a
forall a. Num a => a -> a -> a
* a
w a -> a -> a
forall a. Num a => a -> a -> a
+ a
u a -> a -> a
forall a. Num a => a -> a -> a
+ a
w )a -> a -> Complex a
forall a. a -> a -> Complex a
:+ (a
u a -> a -> a
forall a. Num a => a -> a -> a
+ a
1)a -> a -> a
forall a. Num a => a -> a -> a
* a -> a
forall a. Floating a => a -> a
sin a
b |Bool
otherwise =Complex a -> Complex a
forall a. Floating a => a -> a
exp Complex a
x Complex a -> Complex a -> Complex a
forall a. Num a => a -> a -> a
- Complex a
1{-# INLINEexpm1 #-}-- | @since 4.8.0.0instanceStorable a =>Storable (Complex a )wheresizeOf :: Complex a -> Int
sizeOf Complex a
a =Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
* a -> Int
forall a. Storable a => a -> Int
sizeOf (Complex a -> a
forall a. Complex a -> a
realPart Complex a
a )alignment :: Complex a -> Int
alignment Complex a
a =a -> Int
forall a. Storable a => a -> Int
alignment (Complex a -> a
forall a. Complex a -> a
realPart Complex a
a )peek :: Ptr (Complex a) -> IO (Complex a)
peek Ptr (Complex a)
p =doq <-Ptr a -> IO (Ptr a)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Ptr a -> IO (Ptr a)) -> Ptr a -> IO (Ptr a)
forall a b. (a -> b) -> a -> b
$ Ptr (Complex a) -> Ptr a
forall a b. Ptr a -> Ptr b
castPtr Ptr (Complex a)
p r <-peek q i <-peekElemOff q 1return (r :+ i )poke :: Ptr (Complex a) -> Complex a -> IO ()
poke Ptr (Complex a)
p (a
r :+ a
i )=doq <-Ptr a -> IO (Ptr a)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Ptr a -> IO (Ptr a)) -> Ptr a -> IO (Ptr a)
forall a b. (a -> b) -> a -> b
$ (Ptr (Complex a) -> Ptr a
forall a b. Ptr a -> Ptr b
castPtr Ptr (Complex a)
p )poke q r pokeElemOff q 1i -- | @since 4.9.0.0instanceApplicative Complex wherepure :: forall a. a -> Complex a
pure a
a =a
a a -> a -> Complex a
forall a. a -> a -> Complex a
:+ a
a a -> b
f :+ a -> b
g <*> :: forall a b. Complex (a -> b) -> Complex a -> Complex b
<*> a
a :+ a
b =a -> b
f a
a b -> b -> Complex b
forall a. a -> a -> Complex a
:+ a -> b
g a
b liftA2 :: forall a b c. (a -> b -> c) -> Complex a -> Complex b -> Complex c
liftA2 a -> b -> c
f (a
x :+ a
y )(b
a :+ b
b )=a -> b -> c
f a
x b
a c -> c -> Complex c
forall a. a -> a -> Complex a
:+ a -> b -> c
f a
y b
b -- | @since 4.9.0.0instanceMonad Complex wherea
a :+ a
b >>= :: forall a b. Complex a -> (a -> Complex b) -> Complex b
>>= a -> Complex b
f =Complex b -> b
forall a. Complex a -> a
realPart (a -> Complex b
f a
a )b -> b -> Complex b
forall a. a -> a -> Complex a
:+ Complex b -> b
forall a. Complex a -> a
imagPart (a -> Complex b
f a
b )-- | @since 4.15.0.0instanceMonadZip Complex wheremzipWith :: forall a b c. (a -> b -> c) -> Complex a -> Complex b -> Complex c
mzipWith =(a -> b -> c) -> Complex a -> Complex b -> Complex c
forall a b c. (a -> b -> c) -> Complex a -> Complex b -> Complex c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 -- | @since 4.15.0.0instanceMonadFix Complex wheremfix :: forall a. (a -> Complex a) -> Complex a
mfix a -> Complex a
f =(leta
a :+ a
_=a -> Complex a
f a
a ina
a )a -> a -> Complex a
forall a. a -> a -> Complex a
:+ (leta
_:+ a
a =a -> Complex a
f a
a ina
a )-- ------------------------------------------------------------------------------- Rules on Complex{-# RULES"realToFrac/a->Complex Double"realToFrac =\x ->realToFrac x :+ (0::Double )"realToFrac/a->Complex Float"realToFrac =\x ->realToFrac x :+ (0::Float )#-}

AltStyle によって変換されたページ (->オリジナル) /