tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

17_exp_exact_result_for_positive_one.patch (1510B)


      1 diff --git a/e_exp.cpp b/e_exp.cpp
      2 --- a/e_exp.cpp
      3 +++ b/e_exp.cpp
      4 @@ -91,16 +91,18 @@ ln2LO[2]   ={ 1.90821492927058770002e-10,  /* 0x3dea39ef, 0x35793c76 */
      5 	     -1.90821492927058770002e-10,},/* 0xbdea39ef, 0x35793c76 */
      6 invln2 =  1.44269504088896338700e+00, /* 0x3ff71547, 0x652b82fe */
      7 P1   =  1.66666666666666019037e-01, /* 0x3FC55555, 0x5555553E */
      8 P2   = -2.77777777770155933842e-03, /* 0xBF66C16C, 0x16BEBD93 */
      9 P3   =  6.61375632143793436117e-05, /* 0x3F11566A, 0xAF25DE2C */
     10 P4   = -1.65339022054652515390e-06, /* 0xBEBBBD41, 0xC5D26BF1 */
     11 P5   =  4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */
     12 
     13 +static const double E = 2.7182818284590452354;	/* e */
     14 +
     15 static volatile double
     16 huge	= 1.0e+300,
     17 twom1000= 9.33263618503218878990e-302;     /* 2**-1000=0x01700000,0*/
     18 
     19 double
     20 __ieee754_exp(double x)	/* default IEEE double exp */
     21 {
     22 	double y,hi=0.0,lo=0.0,c,t,twopk;
     23 @@ -122,16 +124,17 @@ __ieee754_exp(double x)	/* default IEEE double exp */
     24 	    }
     25 	    if(x > o_threshold) return huge*huge; /* overflow */
     26 	    if(x < u_threshold) return twom1000*twom1000; /* underflow */
     27 	}
     28 
     29     /* argument reduction */
     30 	if(hx > 0x3fd62e42) {		/* if  |x| > 0.5 ln2 */ 
     31 	    if(hx < 0x3FF0A2B2) {	/* and |x| < 1.5 ln2 */
     32 +		if (x == 1.0) return E;
     33 		hi = x-ln2HI[xsb]; lo=ln2LO[xsb]; k = 1-xsb-xsb;
     34 	    } else {
     35 		k  = (int)(invln2*x+halF[xsb]);
     36 		t  = k;
     37 		hi = x - t*ln2HI[0];	/* t*ln2HI is exact here */
     38 		lo = t*ln2LO[0];
     39 	    }
     40 	    STRICT_ASSIGN(double, x, hi - lo);