UNPKG

psychart

Version:

View air conditions on a psychrometric chart

46 lines (45 loc) 1.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.zero = zero; var SMath = require("smath"); /** * Find the solution (zero) of a function. */ function zero(func, left, right, epsilon, maxIterations) { if (epsilon === void 0) { epsilon = 1e-6; } if (maxIterations === void 0) { maxIterations = 1e6; } for (var i = 0; i < maxIterations; i++) { var funcLeft = func(left); var funcRight = func(right); if (Number.isNaN(funcLeft)) { throw new Error("f(".concat(left, ") is NaN")); } if (Number.isNaN(funcRight)) { throw new Error("f(".concat(right, ") is NaN")); } var leftSign = Math.sign(funcLeft); var rightSign = Math.sign(funcRight); if (SMath.approx(funcLeft, 0, epsilon)) { return left; } if (SMath.approx(funcRight, 0, epsilon)) { return right; } if (leftSign === rightSign) { throw new Error('A solution cannot be found.'); } var mid = (left + right) / 2; var funcMid = func(mid); var midSign = Math.sign(funcMid); if (SMath.approx(funcMid, 0, epsilon)) { return mid; } if (midSign === leftSign) { left = mid; } else { right = mid; } } return (left + right) / 2; }