Ejemplo n.º 1
0
void ei_outsb(u32 addr, const void *vbuf, int len)
{
	NE2000_BYTE *rp, val;
	u8 *buf;

	buf = (u8 *) vbuf;
	rp = (NE2000_BYTE *) NE_DATA_PTR(addr);
	for (; (len > 0); len--) {
		val = *buf++;
		*rp = RSWAP(val);
	}
}
Ejemplo n.º 2
0
static double COMABS(double ar, double ai)
{
  if (ar == 0.0 && ai == 0.0) 
    return 0.0;

  ar = fabs(ar);
  ai = fabs(ai);

  if (ai > ar)
    RSWAP(&ai, &ar);

  if (ai == 0.0)
    return ar;
  else
    return ar * sqrt(1.0 + ai / ar * ai / ar);
}
Ejemplo n.º 3
0
void eig_balance(double *A, size_t n, size_t *low, size_t *high, double *scal)
{
  double b2, r, c, f, g, s, BASIS;
  size_t m, k, j, i;
  int iter;

  BASIS = 2;
  b2 = BASIS * BASIS;
  m = 0;
  k = n - 1;
  iter = 1;
  while (iter == 1)
  {
    iter = 0;
    for (j = k + 1; (j--) > 0;)
    {
      r = 0;
      for (i = 0; i <= k; i++)
        if (i != j)  r += fabs(A[j*n + i]);
      if (r == 0) 
      {
        iter = 1;
        scal[k] = j;
        if (j != k)
        {
          for (i = 0; i <= k; i++) 
	     RSWAP(&(A[i*n + j]), &(A[i*n + k]));
          for (i = m; i < n; i++) 
             RSWAP(&(A[j*n + i]), &(A[k*n + i]));
        }
        k--;
      }
    }
  }

  iter = 1;
  while (iter == 1)
  {
    iter = 0;
    for (j = m; j <= k; j++)
    {
      c = 0.0;
      for (i = m; i <= k; i++)
        if (i != j)  c += fabs(A[i*n + j]);
      if (c == 0.0) 
      {
        iter = 1;
        scal[m] = j;
        if (j != m) 
        {
          for (i = 0; i <= k; i++) 
             RSWAP(&(A[i*n + j]), &(A[i*n + m]));
          for (i = m; i < n; i++) 
             RSWAP(&(A[j*n + i]), &(A[m*n + i]));
        }
        m++;
      }
    }
  }

  (*low) = m;
  (*high) = k;
  for (i = m; i <= k; i++) 
    scal[i] = 1.0;

  iter = 1;
  while (iter == 1)
  {
    iter = 0;
    for (i = m; i <= k; i++)
    {
      c = r = 0.0;
      for (j = m; j <= k; j++)
      {
        if (j != i) 
        {
          c += fabs(A[j*n + i]);
          r += fabs(A[i*n + j]);
        }
      }
      g = r / BASIS;
      f = 1.0;
      s = c + r;

      while (c < g)
      {
        f *= BASIS; /* f = r * BASIS; */
        c *= b2;
      }

      g = r * BASIS;
      while (c >= g)
      {
        f /= BASIS;
        c /= b2;
      }

      if ((c + r) / f < 0.95 * s) 
      {
        iter = 1;
        g = 1.0 / f;
        scal[i] *= f;
        for (j = m; j < n; j++) 
          A[i*n + j] *= g;
        for (j = 0; j <= k; j++)  
          A[j*n + i] *= f;
      }
    }
  }
}