diff --git a/fixed.js b/fixed.js
index 397de0f..b1d671d 100644
--- a/fixed.js
+++ b/fixed.js
@@ -17,11 +17,11 @@ let bytes = Math.ceil(bits / 8) * entries;
let epsilonBits = 1 ;
let epsilon = 2 ** epsilonBits;
-function toFixed(float) {
+export function toFixed(float) {
return Math.round(float * base);
}
-function toFloat(fixed) {
+export function toFloat(fixed) {
return fixed / base;
}
@@ -48,12 +48,12 @@ for (let i = 0; i < entries * 2; i++) {
// returns fixed point
-function log2(fixed) {
+export function log2(fixed) {
return enloggen[toIndex(fixed)];
}
// returns rounded integer
-function pow2(fixed) {
+export function pow2(fixed) {
let n = toIndex(fixed);
if (n > empower.length) {
n = empower.length - 1;
@@ -61,7 +61,7 @@ function pow2(fixed) {
return empower[entries + n];
}
-function mul(a, b) {
+export function mul(a, b) {
if (a == 0) return 0;
if (b == 0) return 0;
let la = log2(a)|0;
@@ -93,6 +93,7 @@ for (let i = 0; i < powEntries; i++) {
}
*/
+/*
// now just try multipling numbers
let deltas = 0;
let deltaAvg = 0;
@@ -153,3 +154,5 @@ for (let i = 0; i < enloggen.length; i++) {
m = Math.max(m, enloggen[i]);
}
console.log(`max enloggen entry is ${m}`);
+
+*/
\ No newline at end of file
diff --git a/sim.html b/sim.html
new file mode 100644
index 0000000..61689cb
--- /dev/null
+++ b/sim.html
@@ -0,0 +1,22 @@
+
+
+
+
Mandelbrot fixed-point test
+
+
+ Mandelbrot fixed-point test
+
+ Float
+
+
+ Fixed-point imul
+
+
+ Fixed-point log
+
+
+
+
+
\ No newline at end of file
diff --git a/sim.js b/sim.js
new file mode 100644
index 0000000..4f819f0
--- /dev/null
+++ b/sim.js
@@ -0,0 +1,65 @@
+import {toFixed, toFloat, mul} from './fixed.js';
+
+let max = 256;
+let width = 256;
+let height = 256;
+let zoom = 1;
+
+let black = 0xff000000;
+let tricolor = [
+ 0xffff0000,
+ 0xff00ff00,
+ 0xff0000ff,
+];
+
+let palette = new Uint32Array(256);
+palette[0] = black;
+for (let i = 0; i < 255; i++) {
+ palette[i + 1] = tricolor[i % 3];
+}
+function nap() {
+ return new Promise((resolve) => setTimeout(() => resolve()));
+}
+
+async function setup(id, iterfunc) {
+ let canvas = document.getElementById(id);
+ let ctx = canvas.getContext('2d');
+ let imageData = ctx.createImageData(width, height);
+ let rgba = new Uint32Array(imageData.data.buffer);
+ for (let y = 0; y < height; y++) {
+ let cy = (y * 2 - height) / (height / 2);
+ for (let x = 0; x < width; x++) {
+ let cx = (x * 2 - width) / (width / 2);
+ let i = iterfunc(cx, cy);
+ let color = palette[i];
+ rgba[y * width + x] = color;
+ rgba[(256 - y) * width + x] = color;
+
+ if (x % 16 == 15) {
+ ctx.putImageData(imageData, 0, 0);
+ await nap();
+ }
+ }
+ }
+}
+
+setup('float', (cx, cy) => {
+ let zx = 0;
+ let zy = 0;
+ let zx_2 = 0;
+ let zy_2 = 0;
+ let zx_zy = 0;
+ for (let i = 1; i < max; i++) {
+ zx = zx_2 - zy_2 + cx;
+ zy = zx_zy + zx_zy + cy;
+ zx_2 = zx * zx;
+ zy_2 = zy * zy;
+ zx_zy = zx * zy;
+ if (zx_2 >= 4 || zy_2 >= 4 || zx_2 + zy_2 >= 4) {
+ return i;
+ }
+ }
+ return 0;
+}).then(() => {
+ console.log('done');
+})
\ No newline at end of file