de200aac4c
[BENCHMARKS] * NEW: Add a new 'btree' benchmark, that does a lot of object creation and recursive function calls. * NEW: Rename the 'string' benchmark as 'string1', to avoid name clashes in Python. * BUG: Fix the HTML table generation.
167 lines
2.9 KiB
Text
Executable file
167 lines
2.9 KiB
Text
Executable file
#!/usr/bin/java --source 11
|
|
|
|
public final class mandelbrot
|
|
{
|
|
static private final int MAXITER = 50;
|
|
static private final double LIMIT = 4.0;
|
|
|
|
private static void mandelbrot(int w, int h)
|
|
{
|
|
double xmin = -1.5;
|
|
double ymin = -1;
|
|
double invn = 2.0 / w;
|
|
boolean checkNext = true;
|
|
int x, y, k;
|
|
double cr, ci, zr, zi, tr, ti, t;
|
|
|
|
for (y = 0; y < h; y++)
|
|
{
|
|
ci = y * invn + ymin;
|
|
|
|
for (x = 0; x < w; x++)
|
|
{
|
|
zr = 0;
|
|
zi = 0;
|
|
tr = 0;
|
|
ti = 0;
|
|
cr = x * invn + xmin;
|
|
t = 0;
|
|
|
|
if (checkNext)
|
|
{
|
|
for (k = 1; k <= MAXITER; k++)
|
|
{
|
|
zi = 2.0 * zr * zi + ci;
|
|
zr = tr - ti + cr;
|
|
ti = zi * zi;
|
|
tr = zr * zr;
|
|
t = tr + ti;
|
|
if (t != t || t > LIMIT)
|
|
break;
|
|
}
|
|
if (k > MAXITER)
|
|
{
|
|
System.out.print("1");
|
|
checkNext = false;
|
|
}
|
|
else
|
|
{
|
|
System.out.print("0");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (k = 1; k <= MAXITER; k++)
|
|
{
|
|
zi = 2.0 * zr * zi + ci;
|
|
zr = tr - ti + cr;
|
|
ti = zi * zi;
|
|
tr = zr * zr;
|
|
}
|
|
|
|
t = tr + ti;
|
|
if (t != t || t >= LIMIT)
|
|
{
|
|
System.out.print("0");
|
|
checkNext = true;
|
|
}
|
|
else
|
|
{
|
|
System.out.print("1");
|
|
}
|
|
}
|
|
}
|
|
|
|
System.out.println();
|
|
System.out.flush();
|
|
}
|
|
}
|
|
|
|
public static void main(String[] args)
|
|
{
|
|
for (int i = 1; i <= 20; i++)
|
|
mandelbrot(200, 200);
|
|
}
|
|
}
|
|
|
|
/*#!/usr/bin/env gbs3
|
|
|
|
Private Const MAXITER As Integer = 50
|
|
Private Const LIMIT As Float = 4.0
|
|
|
|
Sub Mandelbrot(W As Integer, H As Integer)
|
|
|
|
Dim XMin As Float = -1.5
|
|
Dim YMin As Float = -1
|
|
Dim InvN As Float = 2.0 / W
|
|
Dim CheckNext As Boolean = True
|
|
Dim X, Y, K As Integer
|
|
Dim Cr, Ci, Zr, Zi, {Tr}, Ti, T As Float
|
|
|
|
For Y = 0 To H - 1
|
|
|
|
Ci = Y * InvN + YMin
|
|
|
|
For X = 0 To W - 1
|
|
|
|
Zr = 0
|
|
Zi = 0
|
|
{Tr} = 0
|
|
Ti = 0
|
|
Cr = X * InvN + XMin
|
|
|
|
If CheckNext Then
|
|
|
|
For K = 1 To MAXITER
|
|
Zi = 2.0 * Zr * Zi + Ci
|
|
Zr = {Tr} - Ti + Cr
|
|
Ti = Zi * Zi
|
|
{Tr} = Zr * Zr
|
|
T = {Tr} + Ti
|
|
If IsNan(T) Or If T > LIMIT Then Break
|
|
Next
|
|
If K > MAXITER Then
|
|
Print "1";
|
|
CheckNext = False
|
|
Else
|
|
Print "0";
|
|
Endif
|
|
|
|
Else
|
|
|
|
For K = 1 To MAXITER
|
|
|
|
Zi = 2.0 * Zr * Zi + Ci
|
|
Zr = {Tr} - Ti + Cr
|
|
Ti = Zi * Zi
|
|
{Tr} = Zr * Zr
|
|
|
|
Next
|
|
|
|
T = {Tr} + Ti
|
|
If IsNan(T) Or If T > LIMIT Then
|
|
Print "0";
|
|
CheckNext = True
|
|
Else
|
|
Print "1";
|
|
Endif
|
|
|
|
Endif
|
|
|
|
Next
|
|
|
|
Print
|
|
|
|
Next
|
|
|
|
End
|
|
|
|
Dim I As Integer
|
|
|
|
For I = 1 To 20
|
|
Mandelbrot(200, 200)
|
|
Next
|
|
|
|
Error CStr(Jit.Time)
|
|
|
|
*/
|