diff options
| author | Rose Hogenson <rosehogenson@posteo.net> | 2023-08-29 08:44:32 -0700 |
|---|---|---|
| committer | Rose Hogenson <rosehogenson@posteo.net> | 2023-08-29 08:44:32 -0700 |
| commit | 539b10aea546db64e79c3a640a5b70f7b8a9bcff (patch) | |
| tree | d3c71e9b177418429f3e0f26c0d99577ed68545f | |
| parent | 1fe2ad42f8bfc44ea5507023e162f79304d82023 (diff) | |
| download | mandelbrot-539b10aea546db64e79c3a640a5b70f7b8a9bcff.tar.zst | |
Use float64 instead of big.Rat.
It's actually just fine to use float64.
| -rw-r--r-- | mandelbrot.go | 66 |
1 files changed, 25 insertions, 41 deletions
diff --git a/mandelbrot.go b/mandelbrot.go index 5876383..482850a 100644 --- a/mandelbrot.go +++ b/mandelbrot.go @@ -2,60 +2,44 @@ package main import ( "fmt" - "math/big" - "time" ) -var rat4 = big.NewRat(4, 1) - -func mandelbrot(x0, y0 *big.Rat) int { - x := new(big.Rat) - y := new(big.Rat) - x2 := new(big.Rat) - y2 := new(big.Rat) - temp := new(big.Rat) - i := 0 - for ; temp.Add(x2, y2).Cmp(rat4) <= 0; i++ { - y.Add(y, y).Mul(y, x).Add(y, y0) - x.Sub(x2, y2).Add(x, x0) - x2.Mul(x, x) - y2.Mul(y, y) +func mandelbrot(x0, y0 float64) int { + var x, y, x2, y2 float64 + for i := 0; i < 1000; i++ { + if x2+y2 > 4 { + return (i-1)%6 + 1 + } + y = (x+x)*y + y0 + x = x2 - y2 + x0 + x2 = x * x + y2 = y * y } - return (i-1)%6 + 1 + return 0 } -func printMandelbrot(xMin, xRange, yMin, yRange *big.Rat) error { +func main() { const ( + xMin = -2. + xRange = 2.47 + yMin = -1.12 + yRange = 2.24 + width = 80 height = 25 + + xStep = xRange / float64(width) + yStep = yRange / float64(height) ) - grid := make([]int, width*height) - xStep := new(big.Rat).Quo(xRange, big.NewRat(int64(width), 1)) - yStep := new(big.Rat).Quo(yRange, big.NewRat(int64(height), 1)) - y := new(big.Rat) - x := new(big.Rat) - y.Set(yMin) - for i := 0; i < height; i++ { - x.Set(xMin) - for j := 0; j < width; j++ { - go func(i, j int, x, y *big.Rat) { - grid[i*width+j] = mandelbrot(x, y) - }(i, j, new(big.Rat).Set(x), new(big.Rat).Set(y)) - x.Add(x, xStep) - } - y.Add(y, yStep) - } - time.Sleep(time.Minute) + y := yMin for i := 0; i < height; i++ { + x := xMin for j := 0; j < width; j++ { - fmt.Printf("\033[%dm ", 40+grid[i*width+j]) + fmt.Printf("\033[4%dm ", mandelbrot(x, y)) + x += xStep } fmt.Println("\033[49m") + y += yStep } - return nil -} - -func main() { - printMandelbrot(big.NewRat(-3, 2), big.NewRat(247, 100), big.NewRat(-112, 100), big.NewRat(224, 100)) } |
