Resources Numerical accuracy
Equality comparisons
Where the code asks whether two decimal numbers are exactly equal. A floating-point result can differ from another in the last digit after a few transformations, so a mesh run through several of them can change the length of an edge, or miss a match. Compare with < or > where a range is meant, and with a documented epsilon where equality is.
Equality comparisons
These are places worth checking, not confirmed bugs. The scan reads how the code is written, not what it is meant to do, so some entries are fine as they are: a test against exactly 0 is often a deliberate guard against dividing by zero. It skips text, counts and indexes, and any comparison it cannot be sure involves decimal numbers, so there are likely more in the code than are listed here.
-
Two computed values dwg/objects-write.js:659 in insertScale DetailCraft, PartCraft
else if (sx === sy && sx === sz) { w.BB(2); w.RD(sx); }=== in
sx === sy. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values dwg/objects-write.js:659 in insertScale DetailCraft, PartCraft
else if (sx === sy && sx === sz) { w.BB(2); w.RD(sx); }=== in
sx === sz. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values stroke-clean.js:143 in cleanStroke MarkupCraft
const sq = ang !== Math.atan2(last.y - first.y, last.x - first.x);!== in
ang !== Math.atan2(last.y - first.y, last.x - first.x). Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values addons/flow/lib/sim.js:52 in less ModelCraft
less(x, y) { return x.t < y.t || (x.t === y.t && (x.p < y.p || (x.p === y.p && x.s < y.s))); }=== in
x.t === y.t. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Material flow simulation. -
Two computed values anim/curves-ui.js:255 in pickKeys ModelCraft
for (const s of sel) { if (!/^p\d+$/.test(String(s.track))) continue; const tr = a.props?.[+s.track.slice(1)]; const i = tr ? tr.keys.findIndex((k) => k.t === s.t) : -1; if (i >= 0) for (let c = 0; c=== in
k.t === s.t. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values anim/rig-view.js:190 in hitAt ModelCraft
if (!this.S || this.S.m !== m || (!this.stroke && (this.S.topo !== m.topo || this.S.v !== m.v))) { this.S = new Sculptor(m); this.S.v = m.v; }!== in
this.S.v !== m.v. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Bone frames and pose matrices. -
Two computed values earcut.js:161 in findHoleBridge ModelCraft
if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {!== in
p.next.y !== p.y. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values earcut.js:179 in findHoleBridge ModelCraft
if (locallyInside(p, hole) && (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {=== in
p.x === m.x. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values earcut.js:194 in getLeftmost ModelCraft
if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;=== in
p.x === leftmost.x. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values earcut.js:217 in equals ModelCraft
const equals = (p1, p2) => p1.x === p2.x && p1.y === p2.y;=== in
p1.x === p2.x. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values earcut.js:217 in equals ModelCraft
const equals = (p1, p2) => p1.x === p2.x && p1.y === p2.y;=== in
p1.y === p2.y. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values earcut.js:247 in middleInside ModelCraft
if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x)) inside = !inside;!== in
p.next.y !== p.y. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values io/3dm/earcut.js:162 in findHoleBridge ModelCraft
if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {!== in
p.next.y !== p.y. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values io/3dm/earcut.js:180 in findHoleBridge ModelCraft
if (locallyInside(p, hole) && (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {=== in
p.x === m.x. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values io/3dm/earcut.js:195 in getLeftmost ModelCraft
if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;=== in
p.x === leftmost.x. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values io/3dm/earcut.js:218 in equals ModelCraft
const equals = (p1, p2) => p1.x === p2.x && p1.y === p2.y;=== in
p1.x === p2.x. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values io/3dm/earcut.js:218 in equals ModelCraft
const equals = (p1, p2) => p1.x === p2.x && p1.y === p2.y;=== in
p1.y === p2.y. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values io/3dm/earcut.js:248 in middleInside ModelCraft
if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x)) inside = !inside;!== in
p.next.y !== p.y. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values mesh/ops.js:920 in slideRails ModelCraft
out.set(v, { a: dirs[0].w, b: dirs[dirs.length - 1].w === dirs[0].w ? -1 : dirs[dirs.length - 1].w });=== in
dirs[dirs.length - 1].w === dirs[0].w. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Proportional editing weights and edge creases, Inset, bevel and moves along normals, Subdivide, loop cut, bisect, knife and grid fill, Merge, spin, bridge, slide and smooth. -
Two computed values mesh/pick.js:23 in fresh ModelCraft
fresh() { return this.v === this.mesh.v && this.nh === this.mesh.nh; }=== in
this.v === this.mesh.v. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values mesh/sculpt-tool.js:33 in sculptor ModelCraft
if (!this.S || this.S.m !== m || (!this.stroke && (this.S.topo !== m.topo || this.S.liveTopo !== m.liveTopo || this.S.v !== m.v))) { this.S = new Sculptor(m); this.S.v = m.v; }!== in
this.S.v !== m.v. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Sculpt brushes. -
Two computed values model.js:137 in meshGeometry ModelCraft
if (g && g.v === mesh.v && !mesh.recording) return g.def;=== in
g.v === mesh.v. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values model.js:538 in addEdge ModelCraft
if (stops[i].v === stops[i + 1].v) continue;=== in
stops[i].v === stops[i + 1].v. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values modelcraft.js:918 in init ModelCraft
if (c.x !== pinch.c.x || c.y !== pinch.c.y) cam[move](c.x - pinch.c.x, c.y - pinch.c.y, pinch.pivot);!== in
c.x !== pinch.c.x. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Entity info: volume, size, angle and area, Edits and settings from the main window. -
Two computed values modelcraft.js:918 in init ModelCraft
if (c.x !== pinch.c.x || c.y !== pinch.c.y) cam[move](c.x - pinch.c.x, c.y - pinch.c.y, pinch.pivot);!== in
c.y !== pinch.c.y. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Entity info: volume, size, angle and area, Edits and settings from the main window. -
Two computed values modelcraft.js:1223 in openCtxMenu ModelCraft
if (s && !host.sel.some((x) => x.t === s.t && x.id === s.id)) host.setSel([s]);=== in
x.t === s.t. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Entity info: volume, size, angle and area, Edits and settings from the main window. -
Two computed values nurbs/trim.js:163 in sameXY ModelCraft, PartCraft
const sameXY = (a, b) => a.x === b.x && a.y === b.y;=== in
a.x === b.x. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Trimmed surfaces: loops, cut tessellation and area. -
Two computed values nurbs/trim.js:163 in sameXY ModelCraft, PartCraft
const sameXY = (a, b) => a.x === b.x && a.y === b.y;=== in
a.y === b.y. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Trimmed surfaces: loops, cut tessellation and area. -
Two computed values nurbs/trim.js:209 in triangulate ModelCraft, PartCraft
if ((a.y > M.y) === (b.y > M.y) && !(a.y === M.y || b.y === M.y)) continue;=== in
a.y === M.y. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Trimmed surfaces: loops, cut tessellation and area. -
Two computed values nurbs/trim.js:209 in triangulate ModelCraft, PartCraft
if ((a.y > M.y) === (b.y > M.y) && !(a.y === M.y || b.y === M.y)) continue;=== in
b.y === M.y. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Trimmed surfaces: loops, cut tessellation and area. -
Two computed values nurbs/trim.js:210 in triangulate ModelCraft, PartCraft
if (a.y === b.y) continue;=== in
a.y === b.y. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Trimmed surfaces: loops, cut tessellation and area. -
Two computed values timeline.js:305 in refresh ModelCraft
picked = picked.filter((p) => keysOf(p.track).some((k) => k.t === p.t));=== in
k.t === p.t. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values timeline.js:337 in keyOf ModelCraft
return ks && ks.find((x) => x.t === p.t);=== in
x.t === p.t. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values tools.js:1060 in down ModelCraft
const inSel = this.h.sel.some((x) => x.t === s.t && x.id === s.id);=== in
x.t === s.t. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values 3dm/earcut.js:162 in findHoleBridge PartCraft
if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {!== in
p.next.y !== p.y. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values 3dm/earcut.js:180 in findHoleBridge PartCraft
if (locallyInside(p, hole) && (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {=== in
p.x === m.x. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values 3dm/earcut.js:195 in getLeftmost PartCraft
if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;=== in
p.x === leftmost.x. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values 3dm/earcut.js:218 in equals PartCraft
const equals = (p1, p2) => p1.x === p2.x && p1.y === p2.y;=== in
p1.x === p2.x. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values 3dm/earcut.js:218 in equals PartCraft
const equals = (p1, p2) => p1.x === p2.x && p1.y === p2.y;=== in
p1.y === p2.y. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values 3dm/earcut.js:248 in middleInside PartCraft
if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x)) inside = !inside;!== in
p.next.y !== p.y. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values contact.js:159 in pairAll PartCraft
if (!old || old.t !== best.t || Math.abs(old.L1 - best.L1) > 2e-3 || Math.abs(old.L2 - best.L2) > 2e-3) moved = true;!== in
old.t !== best.t. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Contact between parts in stress analysis. -
Two computed values illustrate/anim.js:129 in sortKeys PartCraft
for (const k of keys) { if (out.length && out[out.length - 1].t === k.t) out[out.length - 1] = k; else out.push(k); }=== in
out[out.length - 1].t === k.t. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values illustrate/anim.js:467 in moveKeys PartCraft
for (const k of x.keys) { const last = out[out.length - 1]; if (last && last.t === k.t) { if (moved.has(k) || !moved.has(last)) out[out.length - 1] = k; } else out.push(k); }=== in
last.t === k.t. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values assets/js/engines/des/engine.js:34 in less Shared shell, every app
const less = (x, y) => x.t < y.t || (x.t === y.t && (x.pr < y.pr || (x.pr === y.pr && x.seq < y.seq)));=== in
x.t === y.t. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Flow simulation (discrete events). -
Two computed values assets/js/engines/pcb/place.js:33 in place Shared shell, every app
const stuck = free.length > 1 && free.every((p) => p.x === free[0].x && p.y === free[0].y);=== in
p.x === free[0].x. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Board placement and routing. -
Two computed values assets/js/engines/pcb/place.js:33 in place Shared shell, every app
const stuck = free.length > 1 && free.every((p) => p.x === free[0].x && p.y === free[0].y);=== in
p.y === free[0].y. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Board placement and routing. -
Two computed values fixedqty.js:76 in importQuantities TakeoffCraft
if (old.qty === q.qty && old.unit === q.unit) { out.same++; continue; }=== in
old.qty === q.qty. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Not in the register. -
Two computed values model.js:641 in setMarksArea TakeoffCraft
if (!set.has(m.id) || (m.area || null) === (area || null)) continue;=== in
(m.area || null) === (area || null). Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Takeoff quantities from marks, Priced estimate. -
Two computed values model.js:934 in quantities TakeoffCraft
if (area !== undefined && (m.area || null) !== area) continue; // one bid area (null: the marks in none)!== in
(m.area || null) !== area. Compare within a documented epsilon scaled to the size of the geometry, or restructure so one side is exact. Reviewed: Takeoff quantities from marks, Priced estimate.