Golang complex64 Type
last modified May 8, 2025
This tutorial explains how to use the complex64 built-in type in Go.
We'll cover complex number basics with practical examples of complex arithmetic.
The complex64 type represents complex numbers with float32 real and imaginary parts. It's one of Go's built-in numeric types for complex arithmetic.
In Go, complex64 provides efficient storage for complex numbers.
Operations on complex64 values use 32-bit floating-point precision for both
components.
Basic complex64 creation
The simplest way to create complex64 values uses the complex function.
This example demonstrates basic complex number creation.
Note: The imaginary part is denoted with 'i' suffix.
package main
import "fmt"
func main() {
// Create complex numbers
a := complex(3.0, 4.0) // 3 + 4i
b := complex(1.5, -2.5) // 1.5 - 2.5i
fmt.Printf("a = %v (type %T)\n", a, a)
fmt.Printf("b = %v (type %T)\n", b, b)
// Access real and imaginary parts
fmt.Println("Real part of a:", real(a))
fmt.Println("Imaginary part of a:", imag(a))
}
The complex function creates complex64 values when given float32
arguments. The real and imag functions extract parts.
Complex arithmetic operations
Complex64 values support standard arithmetic operations. This example shows basic arithmetic with complex numbers.
package main
import "fmt"
func main() {
x := complex(2.0, 3.0)
y := complex(1.0, -1.0)
// Addition
sum := x + y
fmt.Println("Sum:", sum) // (3+2i)
// Subtraction
diff := x - y
fmt.Println("Difference:", diff) // (1+4i)
// Multiplication
product := x * y
fmt.Println("Product:", product) // (5+1i)
// Division
quotient := x / y
fmt.Println("Quotient:", quotient) // (-0.5+2.5i)
}
Complex arithmetic follows standard mathematical rules. The operations work component-wise while respecting the imaginary unit properties.
Complex conjugate and magnitude
Common complex number operations include conjugates and magnitudes. This example shows how to compute these properties.
package main
import (
"fmt"
"math"
)
func magnitude(c complex64) float32 {
r := real(c)
i := imag(c)
return float32(math.Sqrt(float64(r*r + i*i)))
}
func main() {
z := complex(4.0, 3.0)
// Complex conjugate
conjugate := complex(real(z), -imag(z))
fmt.Println("Conjugate:", conjugate) // (4-3i)
// Magnitude (absolute value)
fmt.Println("Magnitude:", magnitude(z)) // 5
// Built-in complex64 operations
fmt.Println("Built-in magnitude:", cmplx.Abs(z))
}
The conjugate changes the sign of the imaginary part. The magnitude is computed using the Pythagorean theorem. Go's math/cmplx package provides these operations.
Using complex64 in functions
Complex64 values can be passed to and returned from functions. This example demonstrates function usage with complex numbers.
package main
import (
"fmt"
"math/cmplx"
)
func rotate(c complex64, angle float32) complex64 {
// Convert angle to radians
rad := complex(0, float32(cmplx.Pi)*angle/180)
return c * cmplx.Exp(rad)
}
func main() {
point := complex(1.0, 0.0)
// Rotate 90 degrees
rotated := rotate(point, 90)
fmt.Println("After 90° rotation:", rotated) // ~(0+1i)
// Rotate another 90 degrees
rotated = rotate(rotated, 90)
fmt.Println("After 180° rotation:", rotated) // ~(-1+0i)
}
The rotate function rotates a complex number by a given angle.
Complex numbers naturally represent 2D points and rotations.
Complex64 in signal processing
Complex numbers are fundamental in signal processing. This example shows a basic Fourier transform simulation.
package main
import (
"fmt"
"math"
)
func dft(signal []complex64) []complex64 {
N := len(signal)
spectrum := make([]complex64, N)
for k := 0; k < N; k++ {
var sum complex64
for n := 0; n < N; n++ {
angle := -2 * math.Pi * float64(k*n) / float64(N)
c := complex(float32(math.Cos(angle)), float32(math.Sin(angle)))
sum += signal[n] * c
}
spectrum[k] = sum
}
return spectrum
}
func main() {
// Create a simple signal (sine wave)
signal := make([]complex64, 8)
for i := range signal {
signal[i] = complex(float32(math.Sin(2*math.Pi*float64(i)/8)), 0)
}
// Compute DFT
spectrum := dft(signal)
fmt.Println("Signal:", signal)
fmt.Println("Spectrum:", spectrum)
}
This discrete Fourier transform implementation uses complex64 for efficient storage. Each frequency component is represented as a complex number.
Source
This tutorial covered the complex64 type in Go with practical
examples of complex number operations and applications.
Author
List all Golang tutorials.