Golang complex function
last modified May 8, 2025
This tutorial explains how to use the complex built-in function in Go.
We'll cover complex number basics with practical examples of complex operations.
The complex function constructs a complex value from two floating-point numbers. In Go, complex numbers are a first-class type with built-in support.
Go provides two complex number types: complex64 and complex128.
These correspond to 32-bit and 64-bit floating-point components respectively.
Basic complex number creation
The simplest use of complex creates a complex number from two floats.
This example demonstrates basic complex number construction.
Note: Both arguments must be of the same floating-point type.
package main
import "fmt"
func main() {
// Create complex128 numbers
a := complex(3.5, 2.1)
b := complex(1.2, 4.7)
fmt.Println("a =", a)
fmt.Println("b =", b)
// Perform basic arithmetic
sum := a + b
product := a * b
fmt.Println("Sum:", sum)
fmt.Println("Product:", product)
}
The complex function combines two floats into a complex number.
Go supports arithmetic operations directly on complex numbers.
Extracting real and imaginary parts
We can extract the real and imaginary components using real and
imag functions. This example shows component extraction.
package main
import (
"fmt"
"math"
)
func main() {
c := complex(4.2, 5.3)
r := real(c)
i := imag(c)
fmt.Printf("Complex: %.2f\n", c)
fmt.Printf("Real part: %.2f\n", r)
fmt.Printf("Imaginary part: %.2f\n", i)
// Calculate magnitude
magnitude := math.Hypot(r, i)
fmt.Printf("Magnitude: %.2f\n", magnitude)
}
The real and imag functions extract components.
math.Hypot calculates the magnitude of the complex number.
Complex64 vs complex128
Go provides two complex number types with different precision levels. This example demonstrates the difference between them.
package main
import "fmt"
func main() {
// complex64 uses float32 components
c64 := complex(float32(1.23456789), float32(9.87654321))
// complex128 uses float64 components
c128 := complex(1.23456789, 9.87654321)
fmt.Println("complex64:", c64)
fmt.Println("complex128:", c128)
// Precision difference
fmt.Printf("complex64 real part: %.15f\n", real(c64))
fmt.Printf("complex128 real part: %.15f\n", real(c128))
}
complex64 has less precision than complex128.
The output shows the difference in floating-point component precision.
Complex number operations
Go supports various mathematical operations with complex numbers. This example demonstrates common complex number operations.
package main
import (
"fmt"
"math/cmplx"
)
func main() {
a := complex(3, 4)
b := complex(1, 2)
// Basic arithmetic
fmt.Println("a + b =", a+b)
fmt.Println("a - b =", a-b)
fmt.Println("a * b =", a*b)
fmt.Println("a / b =", a/b)
// Math functions
fmt.Println("Conjugate of a:", cmplx.Conj(a))
fmt.Println("Phase (angle) of a:", cmplx.Phase(a))
fmt.Println("Square root of a:", cmplx.Sqrt(a))
}
The cmplx package provides advanced complex number functions.
Basic arithmetic operations work directly with complex numbers.
Practical application: FFT example
Complex numbers are essential in signal processing. This example shows a simple Fast Fourier Transform (FFT) using complex numbers.
package main
import (
"fmt"
"math"
"math/cmplx"
)
func simpleFFT(input []float64) []complex128 {
n := len(input)
output := make([]complex128, n)
for k := 0; k < n; k++ {
var sum complex128
for t := 0; t < n; t++ {
angle := -2 * math.Pi * float64(k) * float64(t) / float64(n)
sum += complex(input[t]*math.Cos(angle), input[t]*math.Sin(angle))
}
output[k] = sum
}
return output
}
func main() {
signal := []float64{1, 2, 1, 2, 1, 2, 1, 2}
spectrum := simpleFFT(signal)
fmt.Println("Input signal:", signal)
fmt.Println("FFT result:")
for i, val := range spectrum {
fmt.Printf("Bin %d: %.2f (magnitude %.2f)\n",
i, val, cmplx.Abs(val))
}
}
This simplified FFT implementation demonstrates complex number usage. The result shows frequency components as complex numbers with magnitudes.
Source
This tutorial covered the complex function in Go with practical
examples of complex number creation and operations.
Author
List all Golang tutorials.