diff options
| author | Julian Weigt <juw@posteo.de> | 2026-02-09 13:46:33 +0100 |
|---|---|---|
| committer | Julian Weigt <juw@posteo.de> | 2026-02-09 14:12:11 +0100 |
| commit | b9f353f966ffa48dd0179c3ab3eb73e9feb9940e (patch) | |
| tree | b4d5cb13e5b0519f46ab307f1ba05a3fb0c29c69 | |
| parent | 25ef88ad223b6c92106fb45658a98a1a4b95c4a2 (diff) | |
Don't invoke pow if exponent is 1. Also write routine to compute exponentials by multiplication if the exponent is integer.
| -rw-r--r-- | double-error.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/double-error.c b/double-error.c index 63c820f..5d08019 100644 --- a/double-error.c +++ b/double-error.c @@ -92,7 +92,17 @@ double_error absolute(double_error de){ return dea; } +double_error power_int(double_error de, double_error p){ + if((int) p.v == 1) return de; + + double_error pm = p; + pm.v--; + return product(power_int(de,pm),de); +} + double_error power(double_error de, double_error p) { + //if(p.e == 0.0 && ((vtype) ((int) p.v) == p.v)) return power_int(de,p); + if(p.e == 0.0 && ((vtype) ((int) p.v) == p.v) && (int) p.v == 1) return de; double_error dep; dep.v = pow(de.v,p.v); vtype dmin = (de.v - de.e)*(1-EPS); |
