summaryrefslogtreecommitdiff
path: root/go/complex-numbers/complex_numbers.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/complex-numbers/complex_numbers.go')
-rw-r--r--go/complex-numbers/complex_numbers.go72
1 files changed, 72 insertions, 0 deletions
diff --git a/go/complex-numbers/complex_numbers.go b/go/complex-numbers/complex_numbers.go
new file mode 100644
index 0000000..d06bd3d
--- /dev/null
+++ b/go/complex-numbers/complex_numbers.go
@@ -0,0 +1,72 @@
+package complexnumbers
+
+import "math"
+
+// Define the Number type here.
+type Number struct {
+ Re, Im float64
+}
+
+func (n Number) Real() float64 {
+ return n.Re
+}
+
+func (n Number) Imaginary() float64 {
+ return n.Im
+}
+
+func (n1 Number) Add(n2 Number) Number {
+ return Number{
+ Re: n1.Re + n2.Re,
+ Im: n1.Im + n2.Im,
+ }
+}
+
+func (n1 Number) Subtract(n2 Number) Number {
+ return Number{
+ Re: n1.Re - n2.Re,
+ Im: n1.Im - n2.Im,
+ }
+}
+
+func (n1 Number) Multiply(n2 Number) Number {
+ return Number{
+ Re: n1.Re*n2.Re - n1.Im*n2.Im,
+ Im: n1.Im*n2.Re + n1.Re*n2.Im,
+ }
+}
+
+func (n Number) Times(factor float64) Number {
+ return Number{
+ Re: n.Re * factor,
+ Im: n.Im * factor,
+ }
+}
+
+func (n1 Number) Divide(n2 Number) Number {
+ x := n2.Re*n2.Re + n2.Im*n2.Im
+ return Number{
+ Re: (n1.Re*n2.Re + n1.Im*n2.Im) / x,
+ Im: (n1.Im*n2.Re - n1.Re*n2.Im) / x,
+ }
+}
+
+func (n Number) Conjugate() Number {
+ return Number{
+ Re: n.Re,
+ Im: -n.Im,
+ }
+}
+
+func (n Number) Abs() float64 {
+ return math.Sqrt(n.Re*n.Re + n.Im*n.Im)
+}
+
+func (n Number) Exp() Number {
+ r := math.Exp(n.Re)
+ s, c := math.Sincos(n.Im)
+ return Number{
+ Re: r * c,
+ Im: r * s,
+ }
+}