IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Feb 8, 2023, 12:17:35 PM (3 years ago)
Author:
eugene
Message:

merge from eam_branches/ipp-20220316. fixes for more pendantic gcc; add opihi memory stats; string vector improvements; use named macros for fixed string lengths

Location:
trunk/Ohana
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana

  • trunk/Ohana/src/opihi/lib.data/svdcmp.c

    r34088 r42389  
    2323  l = nm = 0;
    2424  ALLOCATE (rv1, float, Nx);
     25
    2526  for (i = 0; i < Nx; i++) {
    2627    l = i + 1;
     
    2930    if (i < Ny) {
    3031      for (k = i; k < Ny; k++) scale += fabs(a[k*Nx + i]);
    31       if (scale) {
     32      if (scale > 0.0) {
    3233        for (k = i; k < Ny; k++) {
    3334          a[k*Nx + i] /= scale;
     
    3536        }
    3637        f = a[i*Nx + i];
    37         g  = -FSIGN(sqrt(s), f);
     38        g = sqrt(s);
     39        if (f > 0.0) { g = -g; }
    3840        h = f*g - s;
    3941        a[i*Nx + i] = f-g;
    4042        if (i != Nx - 1) {
    4143          for (j = l; j < Nx; j++) {
    42             for (s = 0.0, k = i; k < Ny; k++) s += a[k*Nx + i]*a[k*Nx + j];
     44            s = 0.0;
     45            for (k = i; k < Ny; k++) { s += a[k*Nx + i]*a[k*Nx + j]; }
    4346            f = s/h;
    44             for (k = i; k < Ny; k++) a[k*Nx + j] += f*a[k*Nx + i];
     47            for (k = i; k < Ny; k++) { a[k*Nx + j] += f*a[k*Nx + i]; }
    4548          }
    4649        }
    47         for (k = i; k < Ny; k++) a[k*Nx + i] *= scale;
     50        for (k = i; k < Ny; k++) { a[k*Nx + i] *= scale; }
    4851      }
    4952    }
     
    5154    g = s = scale = 0.0;
    5255    if ((i < Ny) && (i != (Nx - 1))) {
    53       for (k = l; k < Nx; k++) scale += fabs(a[i*Nx + k]);
    54       if (scale) {
     56      for (k = l; k < Nx; k++) { scale += fabs(a[i*Nx + k]); }
     57      if (scale > 0.0) {
    5558        for (k = l; k < Nx; k++) {
    5659          a[i*Nx + k] /= scale;
     
    5861        }
    5962        f = a[i*Nx + l];
    60         g = -FSIGN(sqrt(s), f);
     63        g = sqrt(s);
     64        if (f > 0.0) { g = -g; }
    6165        h = f*g - s;
    6266        a[i*Nx + l] = f-g;
    63         for (k = l; k < Nx; k++) rv1[k] = a[i*Nx + k]/h;
     67        for (k = l; k < Nx; k++) { rv1[k] = a[i*Nx + k]/h; }
    6468        if (i != Ny - 1) {
    6569          for (j = l; j < Ny; j++) {
    66             for (s = 0.0, k = l; k < Nx; k++) s += a[j*Nx + k]*a[i*Nx + k];
    67             for (k = l; k < Nx; k++) a[j*Nx + k] += s*rv1[k];
     70            s = 0.0;
     71            for (k = l; k < Nx; k++) { s += a[j*Nx + k]*a[i*Nx + k];}
     72            for (k = l; k < Nx; k++) { a[j*Nx + k] += s*rv1[k]; }
    6873          }
    6974        }
    70         for (k = l; k < Nx; k++) a[i*Nx + k] *= scale;
     75        for (k = l; k < Nx; k++) { a[i*Nx + k] *= scale; }
    7176      }
    7277    }
     
    7681  for (i = Nx - 1; i >= 0; i--) {
    7782    if (i < Nx - 1) {
    78       if (g) {
     83      if (g != 0.0) {
    7984        /* isn't l == n to start?? */
    8085        for (j = l; j < Nx; j++) v[j*Nx + i] = (a[i*Nx + j]/a[i*Nx + l])/g;
    8186        for (j = l; j < Nx; j++) {
    82           for (s = 0.0, k = l; k < Nx; k++) s += a[i*Nx + k]*v[k*Nx + j];
     87          s = 0.0;
     88          for (k = l; k < Nx; k++) s += a[i*Nx + k]*v[k*Nx + j];
    8389          for (k = l; k < Nx; k++) v[k*Nx + j] += s*v[k*Nx + i];
    8490        }
    8591      }
    86       for (j = l; j < Nx; j++) v[i*Nx + j] = v[j*Nx + i] = 0.0;
     92      for (j = l; j < Nx; j++) { v[i*Nx + j] = v[j*Nx + i] = 0.0; }
    8793    }
    8894    v[i*Nx + i] = 1.0;
     
    9399    l = i + 1;
    94100    g = w[i];
    95     if (i < Nx - 1)
    96       for (j = l; j < Nx; j++) a[i*Nx + j] = 0.0;
    97     if (g) {
     101    if (i < Nx - 1) { for (j = l; j < Nx; j++) {a[i*Nx + j] = 0.0; }}
     102    if (g != 0.0) {
    98103      g = 1.0/g;
    99104      if (i != Nx - 1) {
    100105        for (j = l; j < Nx; j++) {
    101           for (s = 0.0, k = l; k < Ny; k++) s += a[k*Nx + i]*a[k*Nx + j];
     106          s = 0.0;
     107          for (k = l; k < Ny; k++) { s += a[k*Nx + i]*a[k*Nx + j];}
    102108          f = (s/a[i*Nx + i])*g;
    103           for (k = i; k < Ny; k++) a[k*Nx + j] += f*a[k*Nx + i];
    104         }
    105       }
    106       for (j = i; j < Ny; j++) a[j*Nx + i] *= g;
     109          for (k = i; k < Ny; k++) { a[k*Nx + j] += f*a[k*Nx + i]; }
     110        }
     111      }
     112      for (j = i; j < Ny; j++) { a[j*Nx + i] *= g; }
    107113    } else {
    108       for (j = i; j < Ny; j++) a[j*Nx + i] = 0.0;
    109     }
    110     ++a[i*Nx + i];
     114      for (j = i; j < Ny; j++) { a[j*Nx + i] = 0.0; }
     115    }
     116    a[i*Nx + i] ++;
    111117  }
    112118
     
    126132        c = 0.0;
    127133        s = 1.0;
    128         for (i = l; i < k; i++) {
     134        for (i = l; i <= k; i++) {
    129135          f = s*rv1[i];
    130136          if (fabs(f)+anorm != anorm) {
     
    160166      f = ((y-z)*(y+z) + (g-h)*(g+h))/(2.0*h*y);
    161167      g = hypot (f, 1.0);
    162       f = ((x-z)*(x+z) + h*((y/(f+FSIGN(g, f)))-h))/x;
     168     
     169      float tmp = g;
     170      if (f < 0.0) { tmp = - tmp; }
     171
     172      f = ((x-z)*(x+z) + h*((y/(f+tmp))-h))/x;
     173
    163174      c = s = 1.0;
    164       for (j = l; j < nm; j++) {
     175      for (j = l; j <= nm; j++) {
    165176        i = j+1;
    166177        g = rv1[i];
     
    184195        z = hypot(f, h);
    185196        w[j] = z;
    186         if (z) {
     197        if (z != 0.0) {
    187198          z = 1.0/z;
    188199          c = f*z;
Note: See TracChangeset for help on using the changeset viewer.