diff options
| author | Julian Weigt <juw@posteo.de> | 2026-01-18 13:28:25 +0100 |
|---|---|---|
| committer | Julian Weigt <juw@posteo.de> | 2026-02-04 15:56:45 +0100 |
| commit | b7835be8db1d6d2ef60bbe9e972cb708c0fee8c0 (patch) | |
| tree | 8d81ca6a69e2fd10762f9fb60b660cd958ff0efc /double-error.c | |
| parent | 6ceb2c20056d6cece59791686deeeac312fa6009 (diff) | |
Allow p=∞ in program and adjust and generalize printing accordingly.
Diffstat (limited to 'double-error.c')
| -rw-r--r-- | double-error.c | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/double-error.c b/double-error.c index 9490671..8df0974 100644 --- a/double-error.c +++ b/double-error.c @@ -16,13 +16,17 @@ double_error int_to_valuetype(int i){ return de; } -double_error int_to_exptype(double d){ +double_error int_to_exptype(int i){ return int_to_valuetype(i); } + +double_error infinity_to_exptype(){ double_error de; - de.v = d; - de.e = EPS*fabs(d) + DBL_MIN; + de.v = INFINITY; + de.e = 0; return de; } +bool exptype_is_infinite(double_error d){ return d.v == INFINITY; } + double_error sum(double_error de1, double_error de2){ double_error de; de.v = de1.v + de2.v; @@ -113,27 +117,45 @@ double valuetype_to_double(double_error de){ return de.v; } double exptype_to_double(double_error de){ return de.v; } int valuetype_to_string(char* s, double_error de){ - sprintf(s,"%f… +/- %6.1e",de.v,de.e); + if(de.e == 0.0){ + if(de.v == 0.0 || de.v == 1.0 || de.v == 2.0 || de.v == 4.0 || de.v == 8.0 || de.v == 16.0) sprintf(s,"%d", (int)de.v); + else sprintf(s,"%4.3f…",de.v); + } + else sprintf(s,"%4.3f… +/- %6.1e",de.v,de.e); return 0; } +int exptype_to_string(char* s, double_error de){ + if(exptype_is_infinite(de)) return sprintf(s,"inf"); + else return valuetype_to_string(s,de); +} + int valuetype_to_latex(char* s, double_error de){ if(de.e == 0.0){ - if(de.v == 0.0) sprintf(s,"$0$"); - else if(de.v == 1.0) sprintf(s,"$1$"); + if(de.v == 0.0 || de.v == 1.0 || de.v == 2.0 || de.v == 4.0 || de.v == 8.0 || de.v == 16.0) sprintf(s,"%d", (int)de.v); + else sprintf(s,"%4.3f\\ldots",de.v); } - else sprintf(s,"$%4.3f\\ldots\\pm\\texttt{%1.0e}$",de.v,de.e); + else sprintf(s,"%4.3f\\ldots\\pm\\texttt{%1.0e}",de.v,de.e); return 0; } +int exptype_to_latex(char* s, double_error de){ + if(exptype_is_infinite(de)) return sprintf(s,"\\infty"); + else return valuetype_to_latex(s,de); +} + int root_to_string(char* s, double_error de, double_error p){ - double_error de1p = power(de,ratio(int_to_valuetype(1),p)); + double_error de1p; + if(exptype_is_infinite(p)) de1p = de; + else de1p = power(de,ratio(int_to_valuetype(1),p)); valuetype_to_string(s,de1p); return 0; } int root_to_latex(char* s, double_error de, double_error p){ - double_error de1p = power(de,ratio(int_to_valuetype(1),p)); + double_error de1p; + if(exptype_is_infinite(p)) de1p = de; + else de1p = power(de,ratio(int_to_valuetype(1),p)); valuetype_to_latex(s,de1p); return 0; } |
