'Test accuracy of math.hypot()' from math import hypot, frexp, ldexp from random import expovariate, triangular from decimal import Decimal from collections import Counter from pprint import pprint hist = Counter() def ulp(x): mant, exp = frexp(x) return ldexp(0.5, exp - 52) k = 10_000 n = 1_000 reverse = True for i in range(n): args = [triangular(0.999, 1.001) for i in range(k)] args.sort(reverse=reverse) expected = float(sum(x**2 for x in map(Decimal, args)).sqrt()) actual = hypot(*args) ulps = (actual - expected) / ulp(expected) hist[ulps] += 1 #print(expected.hex(), actual.hex(), ulps) print(f'k={k}, n={n}, reverse={reverse!r}') pprint(sorted(hist.items()), width=30)