diff options
| author | Julian Weigt <juw@posteo.de> | 2026-01-15 21:17:07 +0100 |
|---|---|---|
| committer | Julian Weigt <juw@posteo.de> | 2026-02-04 15:55:52 +0100 |
| commit | d78cc5836306c3231bb958bffe88ce54c898b512 (patch) | |
| tree | d26da095166ce52ebda1cb59966c84b9d03b1200 /double-error.c | |
| parent | 8e5bf1e894d36ee939653da7bf029f7a10f002d6 (diff) | |
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.
Diffstat (limited to 'double-error.c')
| -rw-r--r-- | double-error.c | 28 |
1 files changed, 16 insertions, 12 deletions
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){ |
