projects
/
mandelbrot.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
37b05b5
)
use vastly more efficiant but less beautiful code for the real calc loop
author
Robert Kaiser
<kairo@kairo.at>
Tue, 19 Aug 2008 01:47:41 +0000
(
03:47
+0200)
committer
Robert Kaiser
<kairo@kairo.at>
Tue, 19 Aug 2008 01:47:41 +0000
(
03:47
+0200)
xulapp/chrome/mandelbrot/content/mandelbrot.js
patch
|
blob
|
blame
|
history
diff --git
a/xulapp/chrome/mandelbrot/content/mandelbrot.js
b/xulapp/chrome/mandelbrot/content/mandelbrot.js
index 4dd2a4b248e03a05b212e030a04c4c37bd54857c..440911348f03d47ef5c8628c08776b28aeb5611e 100644
(file)
--- a/
xulapp/chrome/mandelbrot/content/mandelbrot.js
+++ b/
xulapp/chrome/mandelbrot/content/mandelbrot.js
@@
-48,11
+48,25
@@
function complex(aReal, aImag) {
}
function mandelbrotValue (aC, aIterMax) {
}
function mandelbrotValue (aC, aIterMax) {
- var Z = new complex(0.0, 0.0);
+ /* XXX: this would be nice code but it looks like JS objects are too heavy for this.
+ let Z = new complex(0.0, 0.0);
for (var iter = 0; iter < aIterMax; iter++) {
Z = Z.square().add(aC);
if (Z.r * Z.r + Z.i * Z.i > 256) { break; }
}
for (var iter = 0; iter < aIterMax; iter++) {
Z = Z.square().add(aC);
if (Z.r * Z.r + Z.i * Z.i > 256) { break; }
}
+ */
+
+ // highly optimized code for fast calculation
+ let Cr = aC.r, Ci = aC.i;
+ let Zr = 0.0, Zi = 0.0;
+ let Zr2 = Zr * Zr, Zi2 = Zi * Zi;
+ for (var iter = 0; iter < aIterMax; iter++) {
+ Zi = 2 * Zr * Zi + Ci;
+ Zr = Zr2 - Zi2 + Cr;
+
+ Zr2 = Zr * Zr; Zi2 = Zi * Zi;
+ if (Zr2 + Zi2 > 256) { break; }
+ }
return iter;
}
return iter;
}