From 0df7763366c4a195926f60ff54b5fae7f4b0febc Mon Sep 17 00:00:00 2001 From: Stefan Zermatten Date: Thu, 24 Aug 2023 11:42:47 +0200 Subject: [PATCH] Cleaned up bad messy floats in container weights --- .../computeByType/computeContainer.js | 12 +++++++++--- .../utility/stripFloatingPointOddities.js | 7 ++++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/imports/api/engine/computation/computeComputation/computeByType/computeContainer.js b/app/imports/api/engine/computation/computeComputation/computeByType/computeContainer.js index 61b4b79a..0258692f 100644 --- a/app/imports/api/engine/computation/computeComputation/computeByType/computeContainer.js +++ b/app/imports/api/engine/computation/computeComputation/computeByType/computeContainer.js @@ -1,11 +1,17 @@ import aggregate from './computeVariable/aggregate/index.js'; +import { safeStrip } from '/imports/api/engine/computation/utility/stripFloatingPointOddities.js'; -export default function computeContainer(computation, node){ +export default function computeContainer(computation, node) { if (!node.data) node.data = {}; aggregateLinks(computation, node); + + // Clean up floating points + const prop = node.data; + prop.contentsWeight = safeStrip(prop.contentsWeight); + prop.carriedWeight = safeStrip(prop.carriedWeight); } -function aggregateLinks(computation, node){ +function aggregateLinks(computation, node) { computation.dependencyGraph.forEachLinkedNode( node.id, (linkedNode, link) => { @@ -13,7 +19,7 @@ function aggregateLinks(computation, node){ // Ignore inactive props if (linkedNode.data.inactive) return; // Aggregate inventory links - aggregate.inventory({node, linkedNode, link}); + aggregate.inventory({ node, linkedNode, link }); }, true // enumerate only outbound links ); diff --git a/app/imports/api/engine/computation/utility/stripFloatingPointOddities.js b/app/imports/api/engine/computation/utility/stripFloatingPointOddities.js index 8e55685c..3415ff1a 100644 --- a/app/imports/api/engine/computation/utility/stripFloatingPointOddities.js +++ b/app/imports/api/engine/computation/utility/stripFloatingPointOddities.js @@ -1,3 +1,8 @@ -export default function stripFloatingPointOddities(num, precision = 12){ +export default function stripFloatingPointOddities(num, precision = 12) { return +parseFloat(num.toPrecision(precision)) } + +export function safeStrip(num, precision = 12) { + if (!Number.isFinite(num)) return num; + return stripFloatingPointOddities(num, precision); +}