Go程序设计语言3.3 复数

3.3 复数


Go具备两种大小的复数complex64和complex128,二者分别由float32和float64构成。内置的complex函数根据给定的实部和虚部创建复数,而内置的real函数和imag函数则分别提取复数的实部和虚部:

 

源码中,如果在浮点数或十进制整数后面紧接着写字母i,如3.141592i或2i,它就变成一个虚数,表示一个实部为0的复数:

 

根据常量运算规则,复数常量可以和其他常量相加(整型或浮点型,实数和虚数皆可),这让我们可以自然地写出复数,如1+2i,或等价地,2i+1。前面x和y的声明可以简写为:

 

可以用==或!=判断复数是否等值。若两个复数的实部和虚部都相等,则它们相等。

math/cmplx包提供了复数运算所需的库函数,例如复数的平方根函数和复数的幂函数。

 

下面的程序用complex128运算生成一个Mandelbrot集。

 

 

两个嵌套循环在1024×1024的灰度图上逐行扫描每个点,这个图表示复平面上-2~+2的区域,每个点都对应一个复数。该程序针对各个点反复迭代计算其平方与自身的和,判断其最终能否“超出”半径为2的圆。若然,就根据超出圆边界所需的迭代次数设定该点的灰度。否则,该点属于Mandelbrot集,颜色留黑。最后,程序将标准输出的数据写入PNG图,得到一个标志性的分形,见图3-3。

练习3.5:用image.NewRGBA函数和color.RGBA类型或color.YCbCr类型实现一个Mandelbrot集的全彩图。

练习3.6:超采样(supersampling)通过对几个临近像素颜色值取样并取均值,是一种减少锯齿化的方法。最简单的做法是将每个像素分成4个“子像素”。给出实现方式。

练习3.7:另一种简单的分形是运用牛顿法求某个函数的复数解,比如z4-1=0。以平面上各点作为牛顿法的起始,根据逼近其中一个根(共有4个根)所需的迭代次数对该点设定灰度。再根据求得的根对每个点进行全彩上色。

练习3.8:生成高度放大的分形需要极高的数学精度。分别用以下4种类型(complex64、complex128、big.Float和big.Rat)表示数据实现同一个分形(后面两种类型由math/big包给出。big.Float类型随意选用float32/float64浮点数,但精度有限;big.Rat类型使用无限精度的有理数。)它们在计算性能和内存消耗上相比如何?放大到什么程度,渲染的失真变得可见?

练习3.9:编写一个Web服务器,它生成分形并将图像数据写入客户端。要让客户端得以通过HTTP请求的参数指定x、y值和放大系数。

时间: 2024-10-26 23:21:14

Go程序设计语言3.3 复数的相关文章

Go程序设计语言导读

前 言 The Go Programming Language "Go是一种开源的程序设计语言,它意在使得人们能够方便地构建简单.可靠.高效的软件."(来自Go官网golang.org) Go在2007年9月形成构想,并于2009年11月发布,其发明人是Robert Griesemer.Rob Pike和Ken Thompson,这几位都任职于Google.该语言及其配套工具集使得编译和执行既富有表达力又高效,而且使得程序员能够轻松写出可靠.健壮的程序. Go和C从表面上看起来相似,而

【软考教程】程序设计语言基础

继续软考教程的学习,在第1章,我们主要是对计算机的组成和工作原理做了一定了解,可以说,在他的带领下,我们对计算机硬件方面的知识,有了更加坚实的基础. 第2章,程序设计语言基础知识.不看内容,光从标题来看,并不会觉得陌生."程序设计语言",至今,我们已经接触过不止一种了,从最初的VB.到后来的VB.NET.C#.C++,软考前个阶段,我们还见到了早有耳闻的Java世界. 那么,下面就跟随着"设计语言"的脚步,一起发现编程路上美丽的风光吧. 想要对程序设计语言有个宏观上

最受欢迎的十大程序设计语言排行榜更新(10月版)

在最受欢迎的程序设计语言排行榜上最值得关注的是Ruby从一年前的第十三名上升到第十位.无论如何,按照TIOBE程序设计区域指标的数据,这是个神奇的事情.TIOBE程序设计区域指标用于标识程序设计语言的普及度,并根据世界范围的熟练工程师.课程和第三方供应商对程序设计语言的实际使用率,每月更新一次数据. 流行的搜索引擎Google. MSN和Yahoo!都被用于计算此指标的评估结果,根据TIOBE所言.TIOBE在它的网站上发出如下告诫: 注意:TIOBE指标不是为了衡量哪个程设计语言是最好的或者是

C语言中处理复数的问题

问题描述 C语言中处理复数的问题 代码:complex Temp=(1+complex(cos(-2*PI*nu[x]), sin(-2*PI*nu[x])))/2 问题: error C2784: "std::_Deque_iterator<_Ty,_Alloc> std::operator +(_Deque_iterator<_Ty,_Alloc>::difference_type,std::_Deque_iterator<_Ty,_Alloc>)&quo

c语言编程-这段C程序设计语言书上的代码,运行后按回车只换行并没有输出最长的行,为什么

问题描述 这段C程序设计语言书上的代码,运行后按回车只换行并没有输出最长的行,为什么 #include#define MAXLINE 1000int getline(char line[]int maxline);void copy(char to[]char from[]);main(){int len;int max;char line[MAXLINE];char longest[MAXLINE];max = 0;while ((len = getline(lineMAXLINE))>0)i

《程序分析方法》——1.2 程序设计语言的发展趋势

1.2 程序设计语言的发展趋势 Turbo Pascal编译器的主要编写者以及.NET框架.Delphi和C#之父--Anders Hejlsberg认为,相对于近几十年来计算机硬件的飞速发展,程序语言的改进不是很明显,主要的原因在于人们更关注"工具"."框架"或"开发方法"的变革和创新,而忽略了语言的改进.程序设计离不开程序设计语言,程序设计语言与"工具"."框架"或"开发方法"等一样

Python v3.2发布 面向对象直译式计算机程序设计语言

Python是一种面向对象.直译式计算机程序设计语言,也是一种http://www.aliyun.com/zixun/aggregation/17547.html">功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定.这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行.目前,基于这种语言的相关技术正在飞速的发展,用户数量急剧扩大,相关的资源非常多. 虽然Python可能被粗略地分类为"脚本语言"(script lan

为什么会有这么多种程序设计语言?

传说人类建造通天塔触怒上帝,上帝施法使人类语言混乱彼此之间无法交流.这就是说各种各样的语言其实就是祸乱之源--只会导致交流的不便.可是看看如今的程 序设计语言的数量,你会怀疑人类是否又在造"通天塔"了?真的有这么多语言的必要吗?我到底要学习多少种程序设计语言才够用呢? 根据维基的资料,可以称得上相对"主流"(有人用.有文档)的程序设计语言至少有600种, 还有大量的商业化失败.实用性不高.语言小众(这里的"语言"指的是编码的语言,一般的程序设计语

《Python语言程序设计》——1.3 程序设计语言

1.3 程序设计语言 关键点:计算机程序,又称为软件,是告诉计算机要做什么的指令集. 计算机并不理解人类的语言,所以程序必须用计算机使用的语言来书写.现在有几百种程序设计语言,开发它们对人们来说可以让程序设计过程更加简单.但是,所有的程序必须被转换成计算机能够理解的语言.1.3.1 机器语言 计算机自己的语言(会因计算机的种类不同而有所不同)是它的机器语言--一套内嵌在计算机内的原始指令集.这些指令以二进制代码的形式存在,所以如果给计算机一条用它自己的语言编写的程序,必须输入二进制码的指令.例如

《程序分析方法》——1.1 程序设计语言发展的四个阶段

1.1 程序设计语言发展的四个阶段 到目前为止,程序设计语言的发展经过了机器语言.汇编语言.高级语言.第四代语言四个阶段,每一个阶段都使程序设计的效率大大提高.我们常常把机器语言称为第 一代程序设计语言,把汇编语言称为第二代程序设计语言,把高级语言称为第三代程序设计语言,把最新的程序设计语言称为第四代语言.1.1.1 机器语言 机器语言是计算机能直接识别和执行的一组机器指令的集合.它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能.一条机器指令就是机器语言的一个语句,它是一组有意义的二进