whee
This commit is contained in:
parent
a47836a39a
commit
8044dbfc21
2 changed files with 27 additions and 17 deletions
20
fixed.js
20
fixed.js
|
@ -4,18 +4,19 @@ let bits = 16;
|
||||||
// max Mandelbrot zx/zy addition range prior to checking distance
|
// max Mandelbrot zx/zy addition range prior to checking distance
|
||||||
let inputRange = 4;
|
let inputRange = 4;
|
||||||
|
|
||||||
// Room to hold power up to -12/+4 for 16-bit mandelbrot
|
|
||||||
let shift = 4;
|
|
||||||
let base = 2 ** (bits - shift);
|
|
||||||
|
|
||||||
//let reduction = 4;
|
|
||||||
let reduction = 0;
|
let reduction = 0;
|
||||||
let roundOffset = (2 ** (reduction - 1)) + 1;
|
let roundOffset = (2 ** (reduction - 1)) + 1;
|
||||||
|
|
||||||
|
// Room to hold power up to -12/+4 for 16-bit mandelbrot
|
||||||
|
let shift = 5;
|
||||||
|
let base = 2 ** (bits - shift);
|
||||||
|
|
||||||
|
|
||||||
let entries = 2 ** (bits - reduction);
|
let entries = 2 ** (bits - reduction);
|
||||||
let bytes = Math.ceil(bits / 8) * entries;
|
let bytes = Math.ceil(bits / 8) * entries;
|
||||||
|
|
||||||
// try to keep all but the last few bits semi-accurate
|
// try to keep all but the last few bits semi-accurate
|
||||||
let epsilonBits = 1 ;
|
let epsilonBits = 1;
|
||||||
let epsilon = 2 ** epsilonBits;
|
let epsilon = 2 ** epsilonBits;
|
||||||
|
|
||||||
export function toFixed(float) {
|
export function toFixed(float) {
|
||||||
|
@ -147,8 +148,6 @@ deltaCount = 0;
|
||||||
console.log('done');
|
console.log('done');
|
||||||
|
|
||||||
|
|
||||||
console.log(`size of enloggen table: ${entries} entries, ${bytes} bytes`);
|
|
||||||
console.log(`size of empower table: ${entries * 2} entries, ${bytes * 2} bytes`);
|
|
||||||
|
|
||||||
let m = 0;
|
let m = 0;
|
||||||
for (let i = 0; i < enloggen.length; i++) {
|
for (let i = 0; i < enloggen.length; i++) {
|
||||||
|
@ -156,4 +155,7 @@ for (let i = 0; i < enloggen.length; i++) {
|
||||||
}
|
}
|
||||||
console.log(`max enloggen entry is ${m}`);
|
console.log(`max enloggen entry is ${m}`);
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
console.log(`size of enloggen table: ${entries} entries, ${bytes} bytes`);
|
||||||
|
console.log(`size of empower table: ${entries * 2} entries, ${bytes * 2} bytes`);
|
||||||
|
|
24
sim.js
24
sim.js
|
@ -1,5 +1,13 @@
|
||||||
import {toFixed, toFloat, mul} from './fixed.js';
|
import {toFixed, mul} from './fixed.js';
|
||||||
|
|
||||||
|
let toFixedLog = toFixed;
|
||||||
|
|
||||||
|
function toFixed16(val) {
|
||||||
|
// 4.12
|
||||||
|
return Math.round(val * (2 ** 12))
|
||||||
|
}
|
||||||
|
|
||||||
|
let four16 = toFixed16(4);
|
||||||
|
|
||||||
function imul(a, b) {
|
function imul(a, b) {
|
||||||
return Math.imul(a, b) >> 12;
|
return Math.imul(a, b) >> 12;
|
||||||
|
@ -25,7 +33,7 @@ function logmul(a, b) {
|
||||||
return product;
|
return product;
|
||||||
}
|
}
|
||||||
|
|
||||||
let four = toFixed(4);
|
let fourLog = toFixedLog(4);
|
||||||
|
|
||||||
let max = 256;
|
let max = 256;
|
||||||
let width = 256;
|
let width = 256;
|
||||||
|
@ -146,8 +154,8 @@ function run() {
|
||||||
});
|
});
|
||||||
|
|
||||||
setup('imul', (cx, cy) => {
|
setup('imul', (cx, cy) => {
|
||||||
cx = toFixed(cx);
|
cx = toFixed16(cx);
|
||||||
cy = toFixed(cy);
|
cy = toFixed16(cy);
|
||||||
let zx = 0;
|
let zx = 0;
|
||||||
let zy = 0;
|
let zy = 0;
|
||||||
let zx_2 = 0;
|
let zx_2 = 0;
|
||||||
|
@ -159,7 +167,7 @@ function run() {
|
||||||
zx_2 = imul(zx, zx);
|
zx_2 = imul(zx, zx);
|
||||||
zy_2 = imul(zy, zy);
|
zy_2 = imul(zy, zy);
|
||||||
zx_zy = imul(zx, zy);
|
zx_zy = imul(zx, zy);
|
||||||
if (zx_2 + zy_2 >= four) {
|
if (zx_2 + zy_2 >= four16) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -169,8 +177,8 @@ function run() {
|
||||||
});
|
});
|
||||||
|
|
||||||
setup('log', (cx, cy) => {
|
setup('log', (cx, cy) => {
|
||||||
cx = toFixed(cx);
|
cx = toFixedLog(cx);
|
||||||
cy = toFixed(cy);
|
cy = toFixedLog(cy);
|
||||||
let zx = 0;
|
let zx = 0;
|
||||||
let zy = 0;
|
let zy = 0;
|
||||||
let zx_2 = 0;
|
let zx_2 = 0;
|
||||||
|
@ -182,7 +190,7 @@ function run() {
|
||||||
zx_2 = logmul(zx, zx);
|
zx_2 = logmul(zx, zx);
|
||||||
zy_2 = logmul(zy, zy);
|
zy_2 = logmul(zy, zy);
|
||||||
zx_zy = logmul(zx, zy);
|
zx_zy = logmul(zx, zy);
|
||||||
if (zx_2 + zy_2 >= four) {
|
if (zx_2 + zy_2 >= fourLog) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue