| // Copyright 2012 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // This benchmark, taken from the shootuot, tests floating point performance. |
| |
| package go1 |
| |
| import "testing" |
| |
| func mandelbrot(n int) int { |
| const Iter = 50 |
| const Zero float64 = 0 |
| const Limit = 2.0 |
| ok := 0 |
| for y := 0; y < n; y++ { |
| for x := 0; x < n; x++ { |
| Zr, Zi, Tr, Ti := Zero, Zero, Zero, Zero |
| Cr := (2*float64(x)/float64(n) - 1.5) |
| Ci := (2*float64(y)/float64(n) - 1.0) |
| |
| for i := 0; i < Iter && (Tr+Ti <= Limit*Limit); i++ { |
| Zi = 2*Zr*Zi + Ci |
| Zr = Tr - Ti + Cr |
| Tr = Zr * Zr |
| Ti = Zi * Zi |
| } |
| |
| if Tr+Ti <= Limit*Limit { |
| ok++ |
| } |
| } |
| } |
| return ok |
| } |
| |
| func BenchmarkMandelbrot200(b *testing.B) { |
| for i := 0; i < b.N; i++ { |
| mandelbrot(200) |
| } |
| } |