在 Go 语言中提供了两种精度的 复数 类型:complex64 和 complex128 ,分别对应 float32 和 float64 两种浮点数精度。内置的 complex 函数用于构建复数,内建的 real 和 imag 函数分别返回复数的实部和虚部:
package main
import "fmt"
func main() {
var x complex64 = complex(1, 2)
var y complex128 = complex(3, 4)
var z complex128 = complex(5, 6)
fmt.Println("x = ", x)
fmt.Println("y = ", y)
fmt.Println("z = ", z)
fmt.Println("real(x) = ", real(x))
fmt.Println("imag(x) = ", imag(x))
fmt.Println("y * z = ", y * z)
}
该程序运行后输出如下:
x = (1+2i)
y = (3+4i)
z = (5+6i)
real(x) = 1
imag(x) = 2
y * z = (-9+38i)
当然,我们可以对声明进行简化,使用自然的方式书写复数:
x := 1 + 2i
y := 3 + 4i
z := 5 + 6i
如果一个浮点数面值或一个十进制整数面值后面跟着一个 i
( 1i
的 1
不能省略),它将构成一个复数的虚部,复数的实部是 0
:
fmt.Println(5i) // (0+5i)
math/cmplx
包提供了复数处理的许多函数,例如:
x := -1 + 0i
fmt.Println(cmplx.Abs(x)) // 1
fmt.Println(cmplx.Asin(x)) // (-1.5707963267948966+0i)
fmt.Println(cmplx.Sqrt(x)) // (0+1i)
fmt.Println(cmplx.Phase(x)) // 3.141592653589793
fmt.Println(cmplx.Polar(x)) // 1 3.141592653589793
参考文献:
[1] Alan A. A. Donovan; Brian W. Kernighan, Go 程序设计语言, Translated by 李道兵, 高博, 庞向才, 金鑫鑫 and 林齐斌, 机械工业出版社, 2017.