8000 Make fractional value accumulation consistent inside and outside the … · python/cpython@ec8a15b · GitHub
[go: up one dir, main page]

Skip to content

Commit ec8a15b

Browse files
authored
Make fractional value accumulation consistent inside and outside the loop. (GH-22315)
1 parent 8394500 commit ec8a15b

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

Modules/mathmodule.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2550,8 +2550,7 @@ vector_norm(Py_ssize_t n, double *vec, double max, int found_nan)
25502550
assert(csum + lo * lo == csum);
25512551
frac_lo += lo * lo;
25522552
}
2553-
frac += frac_lo + frac_mid;
2554-
h = sqrt(csum - 1.0 + frac);
2553+
h = sqrt(csum - 1.0 + (frac_lo + frac_mid + frac));
25552554

25562555
x = h;
25572556
t = x * T27;
@@ -2569,15 +2568,15 @@ vector_norm(Py_ssize_t n, double *vec, double max, int found_nan)
25692568
assert(fabs(csum) >= fabs(x));
25702569
oldcsum = csum;
25712570
csum += x;
2572-
frac += (oldcsum - csum) + x;
2571+
frac_mid += (oldcsum - csum) + x;
25732572

25742573
x = -lo * lo;
25752574
assert(fabs(csum) >= fabs(x));
25762575
oldcsum = csum;
25772576
csum += x;
2578-
frac += (oldcsum - csum) + x;
2577+
frac_lo += (oldcsum - csum) + x;
25792578

2580-
x = csum - 1.0 + frac;
2579+
x = csum - 1.0 + (frac_lo + frac_mid + frac);
25812580
return (h + x / (2.0 * h)) / scale;
25822581
}
25832582
/* When max_e < -1023, ldexp(1.0, -max_e) overflows.

0 commit comments

Comments
 (0)
0