From 1905751af56478705b5f1ee26be0acb293f6033d Mon Sep 17 00:00:00 2001 From: Petr Sabanov Date: Tue, 1 Apr 2025 15:07:04 +0300 Subject: [PATCH] Refined epsilon handling: consider boundary values as equal Changed epsilon comparisons from "<" to "<=" so values exactly at epsilon are treated as equal. --- misc/generate.py | 2 +- spline/generate_step.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/misc/generate.py b/misc/generate.py index 8430dfe..3217fbb 100755 --- a/misc/generate.py +++ b/misc/generate.py @@ -86,7 +86,7 @@ def barycentric(X, Y, xx, dist, epsilon): for k in range(n): for i, xi in enumerate(xx): xdiff = xi - X[k] - if mp.fabs(xdiff) < epsilon: + if mp.fabs(xdiff) <= epsilon: exact[i] = k else: temp = c[k] / xdiff diff --git a/spline/generate_step.py b/spline/generate_step.py index 796894b..765f1e6 100755 --- a/spline/generate_step.py +++ b/spline/generate_step.py @@ -85,10 +85,10 @@ def generate_test_case(params): for x in xx: while cur_segment + 1 < len(X) - 1 and X[cur_segment + 1] <= x: cur_segment += 1 - if mp.fabs(x - X[cur_segment]) < float64_eps: + if mp.fabs(x - X[cur_segment]) <= float64_eps: yy.append(Y[cur_segment]) continue - if mp.fabs(x - X[cur_segment+1]) < float64_eps: + if mp.fabs(x - X[cur_segment+1]) <= float64_eps: yy.append(Y[cur_segment+1]) continue match type: