summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@wolfbeast.com>2019-11-15 13:51:29 +0100
committerwolfbeast <mcwerewolf@wolfbeast.com>2019-11-15 13:51:29 +0100
commit85c60f94fb584ecab49743ab533e56f0f9981ecc (patch)
treeab4d77628de849f137ca9b2d0b543da4d49c63ba /modules
parent2057abd196545ddf8c85ab83e7d220367af8b276 (diff)
downloaduxp-85c60f94fb584ecab49743ab533e56f0f9981ecc.tar.gz
Issue #1291 - Part 1: Ensure exp(1) returns e exactly (use a const)
Diffstat (limited to 'modules')
-rw-r--r--modules/fdlibm/src/e_exp.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/modules/fdlibm/src/e_exp.cpp b/modules/fdlibm/src/e_exp.cpp
index b31979134d..c4e530d4d0 100644
--- a/modules/fdlibm/src/e_exp.cpp
+++ b/modules/fdlibm/src/e_exp.cpp
@@ -96,6 +96,8 @@ P3 = 6.61375632143793436117e-05, /* 0x3F11566A, 0xAF25DE2C */
P4 = -1.65339022054652515390e-06, /* 0xBEBBBD41, 0xC5D26BF1 */
P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */
+static const double E = 2.7182818284590452354; /* e */
+
static volatile double
huge = 1.0e+300,
twom1000= 9.33263618503218878990e-302; /* 2**-1000=0x01700000,0*/
@@ -127,6 +129,7 @@ __ieee754_exp(double x) /* default IEEE double exp */
/* argument reduction */
if(hx > 0x3fd62e42) { /* if |x| > 0.5 ln2 */
if(hx < 0x3FF0A2B2) { /* and |x| < 1.5 ln2 */
+ if (x == 1.0) return E;
hi = x-ln2HI[xsb]; lo=ln2LO[xsb]; k = 1-xsb-xsb;
} else {
k = (int)(invln2*x+halF[xsb]);