From e9732a0498143ad774b69e79c888f47aab4fa06b Mon Sep 17 00:00:00 2001 From: Florent Gallaire Date: Thu, 11 Jun 2026 03:01:16 +0200 Subject: [PATCH] math.fsum: handle special values (inf, nan); -inf + inf raises ValueError --- www/src/libs/math.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/www/src/libs/math.js b/www/src/libs/math.js index f8d67fb33..c1144cfc7 100644 --- a/www/src/libs/math.js +++ b/www/src/libs/math.js @@ -1410,12 +1410,24 @@ function fsum(x) { */ var partials = [], res = new Number(), + inf_sum = 0, + special_sum = 0, _it = _b_.iter(x) while (true) { try { var x = _b_.next(_it), i = 0 x = float_check(x) + if (! isFinite(x)) { + // Special values: track infinities and nans separately, as + // CPython's math_fsum does, so that inf + inf returns inf, + // nan propagates, and -inf + inf raises ValueError below. + if (x === Infinity || x === -Infinity) { + inf_sum += x + } + special_sum += x + continue + } for (var j = 0, len = partials.length; j < len; j++) { var y = float_check(partials[j]) if (Math.abs(x) < Math.abs(y)) { @@ -1437,6 +1449,12 @@ function fsum(x) { throw err } } + if (special_sum !== 0) { + if (isNaN(inf_sum)) { + $B.RAISE(_b_.ValueError, '-inf + inf in fsum') + } + return $B.fast_float(special_sum) + } var res = 0 for (var i = 0; i < partials.length; i++) { res += partials[i]