Go提供了两种大小的复数类型:complex64和complex128,分别由float32和float64组成。内置函数complex从指定的实部和虚部构建复数,内置函数real和imag用来获取复数的实部和虚部:var x complex128 = complex(1, 2) // 1+2i

var y complex128 = complex(3, 4) // 3+4i

fmt.Println(x*y) // "(-5+10i)"

fmt.Println(real(x*y)) // "-5"

fmt.Println(imag(x*y)) // "10"如果一个浮点数的字面量后面跟着一个i,例如3.141592i或2i,那么它将变成一个复数的虚部,这个复数的实部是0:fmt.Println(1i * 1i) // "(-1+0i)", i² = -1

在常数运算规则中,复数常量可以加到普通数值常量上(整数或浮点,实部或虚部),因此我们可以这样书写复数:1 + 2i 或者等价的 2i + 1。上面的x和y的声明语句可以这样简化:x := 1 + 2i

y := 3 + 4i复数可以通过== 或 !=进行比较。两个复数相等当且仅当它们的实部和虚部都相等(复数底层是浮点数,因此做相等比较的时候要特别小心)

math/cmplx包提供了操作复数的函数,例如求复数的平方根或复数的幂函数:fmt.Println(cmplx.Sqrt(-1)) // "(0+1i)"

下面的程序使用comlex128算法来生成Mandelbrot图像:package main

import (

"image"

"image/color"

"image/png"

"math/cmplx"

"os"

)

func main() {

const (

xmin, ymin, xmax, ymax = -2, -2, +2, +2

width, height = 1024, 1024

)

img := image.NewRGBA(image.Rect(0, 0, width, height))

for py := 0; py < height; py++ {

y := float64(py)/height*(ymax-ymin) + ymin

for px := 0; px < width; px++ {

x := float64(px)/width*(xmax-xmin) + xmin

z := complex(x, y)

// Image point (px, py) represents complex value z.

img.Set(px, py, mandelbrot(z))

}

}

png.Encode(os.Stdout, img) // NOTE: ignoring errors

}

func mandelbrot(z complex128) color.Color {

const iterations = 200

const contrast = 15

var v complex128

for n := uint8(0); n < iterations; n++ {

v = v*v + z

if cmplx.Abs(v) > 2 {

return color.Gray{255 - contrast*n}

}

}

return color.Black

}

程序中有两个循环在逐点读取一个1024 * 1024的灰度珊格图像,该图像对应-2到+2之间的复数平面。程序会测试每个点,计算它们到圆心的距离是否超过2(这些点是否落在半径为2的原点),如果超过了,这个点被它逃逸所用的循环次数所隐藏,如果没有,这个值归属于Mandelbrot集合并使用黑色标记。最终程序将生成的PNG图像输出到辨准输出:

有疑问加站长微信联系(非本文作者)

go语言复数包_Go语言圣经 2.3-复数相关推荐

  1. go语言复数包_Go语言中包的风格指南

    Go 语言也有自己的命名与代码组织规则.漂亮的代码,布局清晰.易读易懂,就像是设计严谨的 API 一样.拿到代码,用户首先看到和接触的就是布局.命名还有包的结构. 这篇文章不是为了给大家设立硬性的规定 ...

  2. go语言复数包_go语言学习之包和变量详解

    前言 本文主要介绍了关于go语言之包和变量的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.包的概念 包是go语言中不可缺少部分,在每个go源码的第一行进行定义,定义方 ...

  3. go语言视频教程_ go语言入门视频教程_go语言实战视频教程

    许多人可能知道go语言的优点在哪里,但他们不知道go语言适合在哪里使用.通过学习go语言视频教程,可以清楚的知道go语言主要用于服务器端开发,其定位是用来开发"大型软件".学习go ...

  4. python是世界上最好的语言表情包_语言表情包 - 语言微信表情包 - 语言QQ表情包 - 发表情 fabiaoqing.com...

    如果你有一个朋友很久没跟你联系了一是他死了是他是学汉语言的三是他在期末考试如果他既是汉语言的又在准备期末考试你就当他死了吧 - 汉语言专业表情包 对方不想和你说话,向你推荐了世界上最好的语言!(PHP ...

  5. go语言入门经典_Go 语言中的 gRPC 基础入门

    01 为什么使用 gRPC? 借助 gRPC,我们可以在 .proto 文件中一次定义我们的服务,并以 gRPC 支持的任何语言生成客户端和服务器代码,无论是在大型数据中心内的服务器,还是在个人的电脑 ...

  6. r语言mvstats包_R语言交互式可视化包CanvasXpress

    CanvasXpress包简介 CanvasXpress核心是一个JavaScript语言编写的库,主要用于可重复研究. 在R中可以安装canvasXpress包,使用canvasXpress命令绘制 ...

  7. Linux安装R语言shiny包,R语言用Shiny包快速搭建交互网页应用

    Shiny包的特点在于不需要了解网页语言,可以用纯R来搭建.生成的网页应用是动态交互,而且是即时更新的.Shiny还提供了现成组件方便快速在网页上展示数据.图表和模型,的确是非常的炫. 首先安装Shi ...

  8. go语言字符串换行_Go语言中的字符串处理方法示例详解

    1 概述 字符串,string,一串固定长度的字符连接起来的字符集合.Go语言的字符串是使用UTF-8编码的.UTF-8是Unicode的实现方式之一. Go语言原生支持字符串.使用双引号(" ...

  9. python是最好的语言表情包_Python语言学习之如何通过Python用表情包自动回复微信拍一拍...

    本篇文章主要介绍了Python语言学习之如何通过Python用表情包自动回复微信拍一拍,通过具体的内容展现,希望对Python语言的学习有所帮助. 前段时间微信上线了拍一拍功能,刚推出就被有才的网友玩 ...

最新文章

  1. 阿里云OSS 服务端签名后直传之分片上传(结合element-ui的upload组件)
  2. 大气波导计算MATLAB,基于抛物方程的大气波导环境下电波传播的研究rbedacv8.ppt
  3. 如何使用RichEdit
  4. Dotnet的垃圾回收
  5. python 相对导入_python 相对导入与绝对导入
  6. jmeter安装包双击没反应_windows环境下Jmeter5.2的安装使用
  7. python logging模块学习
  8. 【AI视野·今日Robot 机器人论文速览 第三期】Tue, 8 Jun 2021
  9. IDEA 打包 exe 程序 与 javafxpackager 打包 exe 程序
  10. mac版锐捷显示无法连接到服务器,MAC升级10.9后校园网(锐捷)客户端无法连接怎么办?...
  11. MTK通用驱动的安装
  12. OD调试初体验—关闭x86版winrar广告弹窗
  13. STM32硬件SPI时钟频率与时钟解析(基于逻辑分析仪的抓包试验)
  14. TIFF库的tif图片读写
  15. Python实用工具之制作证件照(有界面、附源码、赞关藏)
  16. 判断dll的.netframwork的版本的两种方式
  17. 【电信学】【2015.05】5G通信中降低峰均比的分析
  18. CNN优化trick
  19. 百度与重庆市人力资源和社会保障局达成战略合作,共建AI人才产业基地
  20. 手动安装nginx,ssl双证书引入。

热门文章

  1. QT实现图片的滚轮缩放、框选放大、拖拽移动
  2. VS Code 常用快捷键代码大全
  3. 有哪些好玩有趣的国内外网站值得分享?
  4. 自动建站.实现虚拟二级目录
  5. 2013年EI收录的中国期刊
  6. MATLAB坐标区应用
  7. 海康java版本SDK中jna.jar的说明
  8. 你听到海豚们的哭声了吗?
  9. 录用了一篇 Omega
  10. linux屏幕伽马值设置,设置计算机显示屏的亮度和对比度伽玛值