Ce face complex64, complex128, complex, real și imag
Go are numere complexe direct în limbaj. complex128 are partea reală și cea imaginară de tip float64, iar complex64 de tip float32. Un literal cu i la final este imaginar: z := 3 + 4i creează un complex128. Operatorii + - * / și == funcționează normal.
complex(r, i) construiește un număr complex din două numere reale, iar real(z) și imag(z) extrag cele două părți. Pachetul math/cmplx oferă modulul (cmplx.Abs), faza, rădăcina pătrată, exponențiala și altele. Numerele complexe apar în electrotehnică, procesarea semnalelor și fractali.
Parametri
| Parametru | Descriere |
|---|---|
r, i |
Partea reală și cea imaginară, ambele float32 sau ambele float64. |
c |
Un număr complex. |
Ce returnează
complex: un complex64 sau complex128. real/imag: un float32 sau float64.
Exemple
Exemplul 1: Operații cu numere complexe
package main
import (
"fmt"
"math/cmplx"
)
func main() {
z := 3 + 4i
w := complex(1, -2)
fmt.Println(z+w, z*w, z/w)
fmt.Println("real:", real(z), "imag:", imag(z))
fmt.Println("modul:", cmplx.Abs(z))
fmt.Println("rădăcina lui -1:", cmplx.Sqrt(-1))
fmt.Printf("%T %T\n", z, complex64(z))
}
Rezultat
(4+2i) (11-2i) (-1+2i)
real: 3 imag: 4
modul: 5
rădăcina lui -1: (0+1i)
complex128 complex64
Exemplul 2: Impedanța unui circuit RL
Z = R + jωL; modulul dă impedanța în ohmi, iar faza unghiul dintre tensiune și curent.
package main
import (
"fmt"
"math"
"math/cmplx"
)
func main() {
R := 100.0 // ohmi
L := 0.5 // henry
f := 50.0 // Hz
omega := 2 * math.Pi * f
Z := complex(R, omega*L)
fmt.Printf("Z = %.2f\n", Z)
fmt.Printf("|Z| = %.2f ohmi, faza = %.2f grade\n", cmplx.Abs(Z), cmplx.Phase(Z)*180/math.Pi)
}
Rezultat
Z = (100.00+157.08i)
|Z| = 186.21 ohmi, faza = 57.52 grade
Greșeli frecvente
complex(a, b)cua float64șib float32: părțile trebuie să aibă același tip (mismatched types).- Compararea cu
<: numerele complexe nu sunt ordonate (operator < not defined on complex128). - Folosirea pachetului
mathîn loc demath/cmplx:math.Sqrtnu primește numere complexe.
Comenzi înrudite
float32 și float64: Numere reale în virgulă mobilă: float64 (precizie dublă, tipul implicit) și float32 (precizie simplă).tipuri de bază: Tipurile simple din Go: bool, string, întregi cu și fără semn, numere reale, complexe, byte și rune.Type, Type1, TypeOrExpr, IntegerType, FloatType, ComplexType: Nume folosite doar în documentația pachetului builtin, ca să descrie „orice tip”; nu se pot folosi în cod.