mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2025-08-14 18:41:42 +00:00
回到简体
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
## 3.3. 複數
|
||||
## 3.3. 复数
|
||||
|
||||
Go語言提供了兩種精度的複數類型:complex64和complex128,分别對應float32和float64兩種浮點數精度。內置的complex函數用於構建複數,內建的real和imag函數分别返迴複數的實部和虛部:
|
||||
Go语言提供了两种精度的复数类型:complex64和complex128,分别对应float32和float64两种浮点数精度。内置的complex函数用于构建复数,内建的real和imag函数分别返回复数的实部和虚部:
|
||||
|
||||
```Go
|
||||
var x complex128 = complex(1, 2) // 1+2i
|
||||
@@ -10,28 +10,28 @@ fmt.Println(real(x*y)) // "-5"
|
||||
fmt.Println(imag(x*y)) // "10"
|
||||
```
|
||||
|
||||
如果一個浮點數面值或一個十進製整數面值後面跟着一個i,例如3.141592i或2i,它將構成一個複數的虛部,複數的實部是0:
|
||||
如果一个浮点数面值或一个十进制整数面值后面跟着一个i,例如3.141592i或2i,它将构成一个复数的虚部,复数的实部是0:
|
||||
|
||||
```Go
|
||||
fmt.Println(1i * 1i) // "(-1+0i)", i^2 = -1
|
||||
```
|
||||
|
||||
在常量算術規則下,一個複數常量可以加到另一個普通數值常量(整數或浮點數、實部或虛部),我們可以用自然的方式書寫複數,就像1+2i或與之等價的寫法2i+1。上面x和y的聲明語句還可以簡化:
|
||||
在常量算术规则下,一个复数常量可以加到另一个普通数值常量(整数或浮点数、实部或虚部),我们可以用自然的方式书写复数,就像1+2i或与之等价的写法2i+1。上面x和y的声明语句还可以简化:
|
||||
|
||||
```Go
|
||||
x := 1 + 2i
|
||||
y := 3 + 4i
|
||||
```
|
||||
|
||||
複數也可以用==和!=進行相等比較。隻有兩個複數的實部和虛部都相等的時候它們才是相等的(譯註:浮點數的相等比較是危險的,需要特别小心處理精度問題)。
|
||||
复数也可以用==和!=进行相等比较。只有两个复数的实部和虚部都相等的时候它们才是相等的(译注:浮点数的相等比较是危险的,需要特别小心处理精度问题)。
|
||||
|
||||
math/cmplx包提供了複數處理的許多函數,例如求複數的平方根函數和求冪函數。
|
||||
math/cmplx包提供了复数处理的许多函数,例如求复数的平方根函数和求幂函数。
|
||||
|
||||
```Go
|
||||
fmt.Println(cmplx.Sqrt(-1)) // "(0+1i)"
|
||||
```
|
||||
|
||||
下面的程序使用complex128複數算法來生成一個Mandelbrot圖像。
|
||||
下面的程序使用complex128复数算法来生成一个Mandelbrot图像。
|
||||
|
||||
<u><i>gopl.io/ch3/mandelbrot</i></u>
|
||||
```Go
|
||||
@@ -81,16 +81,16 @@ func mandelbrot(z complex128) color.Color {
|
||||
}
|
||||
```
|
||||
|
||||
用於遍歷1024x1024圖像每個點的兩個嵌套的循環對應-2到+2區間的複數平面。程序反複測試每個點對應複數值平方值加一個增量值對應的點是否超出半徑爲2的圓。如果超過了,通過根據預設置的逃逸迭代次數對應的灰度顔色來代替。如果不是,那麽該點屬於Mandelbrot集合,使用黑色顔色標記。最終程序將生成的PNG格式分形圖像圖像輸出到標準輸出,如圖3.3所示。
|
||||
用于遍历1024x1024图像每个点的两个嵌套的循环对应-2到+2区间的复数平面。程序反复测试每个点对应复数值平方值加一个增量值对应的点是否超出半径为2的圆。如果超过了,通过根据预设置的逃逸迭代次数对应的灰度颜色来代替。如果不是,那么该点属于Mandelbrot集合,使用黑色颜色标记。最终程序将生成的PNG格式分形图像图像输出到标准输出,如图3.3所示。
|
||||
|
||||

|
||||
|
||||
**練習 3.5:** 實現一個綵色的Mandelbrot圖像,使用image.NewRGBA創建圖像,使用color.RGBA或color.YCbCr生成顔色。
|
||||
**练习 3.5:** 实现一个彩色的Mandelbrot图像,使用image.NewRGBA创建图像,使用color.RGBA或color.YCbCr生成颜色。
|
||||
|
||||
**練習 3.6:** 陞采樣技術可以降低每個像素對計算顔色值和平均值的影響。簡單的方法是將每個像素分層四個子像素,實現它。
|
||||
**练习 3.6:** 升采样技术可以降低每个像素对计算颜色值和平均值的影响。简单的方法是将每个像素分层四个子像素,实现它。
|
||||
|
||||
**練習 3.7:** 另一個生成分形圖像的方式是使用牛頓法來求解一個複數方程,例如$$z^4-1=0$$。每個起點到四個根的迭代次數對應陰影的灰度。方程根對應的點用顔色表示。
|
||||
**练习 3.7:** 另一个生成分形图像的方式是使用牛顿法来求解一个复数方程,例如$$z^4-1=0$$。每个起点到四个根的迭代次数对应阴影的灰度。方程根对应的点用颜色表示。
|
||||
|
||||
**練習 3.8:** 通過提高精度來生成更多級别的分形。使用四種不同精度類型的數字實現相同的分形:complex64、complex128、big.Float和big.Rat。(後面兩種類型在math/big包聲明。Float是有指定限精度的浮點數;Rat是無效精度的有理數。)它們間的性能和內存使用對比如何?當渲染圖可見時縮放的級别是多少?
|
||||
**练习 3.8:** 通过提高精度来生成更多级别的分形。使用四种不同精度类型的数字实现相同的分形:complex64、complex128、big.Float和big.Rat。(后面两种类型在math/big包声明。Float是有指定限精度的浮点数;Rat是无效精度的有理数。)它们间的性能和内存使用对比如何?当渲染图可见时缩放的级别是多少?
|
||||
|
||||
**練習 3.9:** 編寫一個web服務器,用於給客戶端生成分形的圖像。運行客戶端用過HTTP參數參數指定x,y和zoom參數。
|
||||
**练习 3.9:** 编写一个web服务器,用于给客户端生成分形的图像。运行客户端用过HTTP参数参数指定x,y和zoom参数。
|
||||
|
Reference in New Issue
Block a user