RosettaCodeData/Task/Arithmetic-Complex/Futhark/arithmetic-complex.futhark

28 lines
645 B
Plaintext

type complex = (f64,f64)
fun complexAdd((a,b): complex) ((c,d): complex): complex =
(a + c,
b + d)
fun complexMult((a,b): complex) ((c,d): complex): complex =
(a*c - b * d,
a*d + b * c)
fun complexInv((r,i): complex): complex =
let denom = r*r + i * i
in (r / denom,
-i / denom)
fun complexNeg((r,i): complex): complex =
(-r, -i)
fun complexConj((r,i): complex): complex =
(r, -i)
fun main (o: int) (a: complex) (b: complex): complex =
if o == 0 then complexAdd a b
else if o == 1 then complexMult a b
else if o == 2 then complexInv a
else if o == 3 then complexNeg a
else complexConj a