12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- -- Mandelbrot benchmark from benchmarks game
- -- https://benchmarksgame-team.pages.debian.net/benchmarksgame/description/mandelbrot.html
- --
- -- Translated from the Java version found at
- -- https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/mandelbrot-java-1.html
- --
- -- * I don't use any explicit buffering. In my experiments it speeds up the
- -- program by less than 10%, while considerably increasing the complexity.
- -- * The LuaJIT version needs to be separate, due to the lack of bitwise ops.
- -- * The output is in the Netpbm file format. Use an image viewer to view the picture.
- local function mandelbrot(N)
- local bits = 0
- local nbits = 0
- local delta = 2.0 / N
- for y = 0, N-1 do
- local Ci = y*delta - 1.0
- for x = 0, N-1 do
- local Cr = x*delta - 1.5
- local bit = 0x1
- local Zr = 0.0
- local Zi = 0.0
- local Zr2 = 0.0
- local Zi2 = 0.0
- for _ = 1, 50 do
- Zi = 2.0 * Zr * Zi + Ci
- Zr = Zr2 - Zi2 + Cr
- Zi2 = Zi * Zi
- Zr2 = Zr * Zr
- if Zi2 + Zr2 > 4.0 then
- bit = 0x0
- break
- end
- end
- bits = (bits << 1) | bit
- nbits = nbits + 1
- if nbits == 8 then
- io.write(string.char(bits))
- bits = 0
- nbits = 0
- end
- end
- if nbits > 0 then
- bits = bits << (8 - nbits)
- io.write(string.char(bits))
- bits = 0
- nbits = 0
- end
- end
- end
- return function(N)
- N = N or 100
- io.write(string.format("P4\n%d %d\n", N, N))
- mandelbrot(N)
- end
|