Example #1
0
        inline A0 finalize(const A0& fe,const  A0& x,const  A0& x2,A0 y)
        {
          y     =  amul(y, -Half<A0>(), x2);

          // multiply log of fraction by log10(e) and base 2 exponent by log10(2)
          A0 z  = mul(x+y, Const<A0, 0x3a37b152>());//7.00731903251827651129E-4f // log10(e)lo
          z     = amul(z, y, Const<A0, 0x3ede0000>()); //4.3359375E-1f	       // log10(e)hi
          z     = amul(z, x, Const<A0, 0x3ede0000>());
          z     = amul(z, fe, Const<A0, 0x39826a14>());//3.0078125E-1f              // log10(2)hi
          return amul(z, fe, Const<A0, 0x3e9a0000>());//2.48745663981195213739E-4f // log10(2)lo
        }
Example #2
0
int utpm_imul(int P, int D, int M, int N, double *y, int ldy, double *x, int ldx){
    /* computes Y *= X in Taylor arithmetic */
    
    int k,d,p;
    double *xd, *yd, *zd;
    double *xp, *yp;
    
    int pstridex, pstridey;
    int dstridex, dstridey;
    
    dstridex = ldx*N;
    dstridey = ldy*N;
    
    pstridex = (D-1)*dstridex;
    pstridey = (D-1)*dstridey;

    /* d > 0: higher order coefficients */
    for(p = 0; p < P; ++p){
        xp = x + p*pstridex;
        yp = y + p*pstridey;
        
        for(d = D-1; 0 < d; --d){
            
            /* compute y_d += x_0 y_d */
            xd = x;
            yd = yp + d*dstridey;
            zd = yd;
            imul(M, N, yd, ldy, xd, ldx);
            
            /* compute y_d += sum_{k=1}^{d-1} x_k y_{d-k} */
            xd = xp + dstridex;
            yd = yp + (d-1)*dstridey;
            
            for(k = 1; k < d; ++k){
                amul(M, N, xd, ldx, yd, ldy, zd, ldy);
                ++xd;
                yd -= (2*dstridey-1);
            }
            
            /* compute y_d += x_d y_0 */
            yd = y;
            xd = xp + d*dstridex;
            amul(M, N, xd, ldx, yd, ldy, zd, ldy);
        }
    }
    
    yd = y;
    xd = x;
    /* d = 0: base point z_0 */
    imul(M, N, yd, ldy, xd, ldx);
    
    return 0;
}
Example #3
0
	static inline A0 log10(const A0& a0)
	{
	  A0 x, fe, x2, y;
	  kernel_log(a0, fe, x, x2, y);
	  y =  amul(y, -Half<A0>(), x2);
	  // multiply log of fraction by log10(e) and base 2 exponent by log10(2)
	  A0 z = mul(x+y, single_constant<A0, 0x3a37b152>());//7.00731903251827651129E-4f // log10(e)lo
	  z = amul(z, y, single_constant<A0, 0x3ede0000>()); //4.3359375E-1f	       // log10(e)hi
	  z = amul(z, x, single_constant<A0, 0x3ede0000>());
	  z = amul(z, fe, single_constant<A0, 0x39826a14>());//3.0078125E-1f              // log10(2)hi
	  z = amul(z, fe, single_constant<A0, 0x3e9a0000>());//2.48745663981195213739E-4f // log10(2)lo
	  A0 y1 = a0-rec(abs(a0)); // trick to reduce selection testing
	  return seladd(is_inf(y1), b_or(z, b_or(is_ltz(a0), is_nan(a0))),y1);
	}
Example #4
0
 inline float log10(const float& a0)
 {
   typedef float A0;
   if (a0 == Inf<A0>()) return a0;
   if (iseqz(a0)) return Minf<A0>();
   if (nt2::is_nan(a0)||isltz(a0)) return Nan<A0>();
   A0 x, fe, x2, y;
   kernel_log(a0, fe, x, x2, y);
   y =  amul(y, -Half<A0>(), x2);
   // multiply log of fraction by log10(e) and base 2 exponent by log10(2)
   A0 z = mul(x+y, Const<float, 0x3a37b152>());//7.00731903251827651129E-4f // log10(e)lo
   z = amul(z, y, Const<float, 0x3ede0000>()); //4.3359375E-1f	       // log10(e)hi
   z = amul(z, x, Const<float, 0x3ede0000>());
   z = amul(z, fe, Const<float, 0x39826a14>());//3.0078125E-1f              // log10(2)hi
   return amul(z, fe, Const<float, 0x3e9a0000 >());//2.48745663981195213739E-4f // log10(2)lo
 }
Example #5
0
	static inline A0 log10(const A0& a0)
	{
	  typedef typename meta::strip<A0>::type stA0; 
	  if (a0 == Inf<stA0>()) return a0;
	  if (is_eqz(a0)) return Minf<stA0>();
	  if (nt2::is_nan(a0)||is_ltz(a0)) return Nan<stA0>();
	  A0 x, fe, x2, y;
	  kernel_log(a0, fe, x, x2, y);
	  y =  amul(y, Mhalf<stA0>(), x2);
	  // multiply log of fraction by log10(e) and base 2 exponent by log10(2)
	  A0 z = mul(x+y, single_constant<stA0, 0x3a37b152>());//7.00731903251827651129E-4f // log10(e)lo
	  z = amul(z, y, single_constant<stA0, 0x3ede0000>()); //4.3359375E-1f	       // log10(e)hi
	  z = amul(z, x, single_constant<stA0, 0x3ede0000>());
	  z = amul(z, fe, single_constant<stA0, 0x39826a14>());//3.0078125E-1f              // log10(2)hi
	  return amul(z, fe, single_constant<stA0, 0x3e9a0000 >());//2.48745663981195213739E-4f // log10(2)lo
	}