From d78cc5836306c3231bb958bffe88ce54c898b512 Mon Sep 17 00:00:00 2001 From: Julian Weigt Date: Thu, 15 Jan 2026 21:17:07 +0100 Subject: Introduce is_greater_certainly and is_greater_possibly to make more robust the printing and finding of records. Start reorganizing to allow eventual printing of all records. --- double-error.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'double-error.c') diff --git a/double-error.c b/double-error.c index e166ec0..16c7e1e 100644 --- a/double-error.c +++ b/double-error.c @@ -41,21 +41,25 @@ double_error difference(double_error de1, double_error de2){ return sum(de1,de2m); } -bool is_greater(double_error de1, double_error de2){ return ((1+EPS)*(de1.v+de1.e) > de2.v-de2.e); } +bool is_greater_certainly(double_error de1, double_error de2){ + return de1.v-de1.e > de2.v+de2.e + EPS*(fabs(de1.v)+fabs(de1.e)+fabs(de2.v)+fabs(de2.e)) + DBL_MIN; +} + +bool is_greater_possibly(double_error de1, double_error de2){ + return de1.v+de1.e + EPS*(fabs(de1.v)+fabs(de1.e)+fabs(de2.v)+fabs(de2.e)) + DBL_MIN > de2.v-de2.e; +} double_error maximum(double_error de1, double_error de2){ - double_error de; - double max1 = de1.v + de1.e; - double max2 = de2.v + de2.e; - if( max1 >= max2 ){ - de.v = de1.v; - de.e = de1.e + max1*EPS + DBL_MIN; - } else { - de.v = de2.v; - de.e = de2.e + max2*EPS + DBL_MIN; + if(is_greater_certainly(de1,de2)) return de1; + else if(is_greater_certainly(de2,de1)) return de2; + else{ + double_error de; + if( de1.v >= de2.v ) de.v = de1.v; + else de.v = de2.v; + if( de1.e >= de2.e ) de.e = de1.e; + else de.e = de2.e; + return de; } - - return de; } double_error product(double_error de1, double_error de2){ -- cgit v1.2.3