Module
Data.Complex
- Package
- purescript-cartesian
- Repository
- Ebmtranceboy/purescript-cartesian
#Cartesian Source
data Cartesian a
Complex number defined by its real and imaginary parts
z1 :: Cartesian Int
z1 = Cartesian 1 2
z2 :: Cartesian Number
z2 = Cartesian 2.0 (-3.0)
z3 :: Cartesian Number
z3 = Cartesian 8.0 1.0
z4 :: Cartesian Int
z4 = Cartesian 5 (-4)
main :: Effect Unit
main = do
assert "Cartesian Int is showable" $ show z1 == "1+2i"
assert "Cartesian Number is showable" $ show z2 == "2.0-3.0i"
assert "Cartesian Number is equatable" $ z1 == z1 && z2 == z2
assert "Cartesian components" $ real z1 == 1 && imag z1 == 2
assert "Complex basis" $ one + ((_*2)<$>i) == z1
assert "Complex subtraction" $ z3-z2 == Cartesian 6.0 4.0
assert "Complex conjugaison" $ conjugate z1 == Cartesian 1 (-2)
assert "Complex division" $ z3/z2 == Cartesian 1.0 2.0
let n = magnitudeSquared $ normalize z3
assert "Complex normalization" $ 1.0 - n < 1e-6
let g = gcd z1 z4
let z1' = z1/g
let z4' = z4/g
let m = mod z1 z4
assert "Gauss integers" $ z1' * g == z1
&& z4' * g == z4
&& magnitudeSquared m < magnitudeSquared z4
assert "Complex power" $
magnitudeSquared (pow (Cartesian 1.0 1.0) 2.0 - ((_*2.0) <$>i)) < 1e-6
Constructors
Cartesian a a
Instances
(Show a, Ord a, Semiring a, Ring a) => Show (Cartesian a)
(Eq a) => Eq (Cartesian a)
(Ring a) => Semiring (Cartesian a)
Functor Cartesian
(Ring a) => Ring (Cartesian a)
(CommutativeRing a) => CommutativeRing (Cartesian a)
(DivisionRing a) => DivisionRing (Cartesian a)
EuclideanRing (Cartesian Number)
EuclideanRing (Cartesian Int)
#magnitudeSquared Source
magnitudeSquared :: forall a. Ring a => Cartesian a -> a
Magnitude Squared
- Modules
- Data.
Complex