Changeset 42389 for trunk/Ohana/src/opihi/lib.data/svdcmp.c
- Timestamp:
- Feb 8, 2023, 12:17:35 PM (3 years ago)
- Location:
- trunk/Ohana
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
src/opihi/lib.data/svdcmp.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana
-
trunk/Ohana/src/opihi/lib.data/svdcmp.c
r34088 r42389 23 23 l = nm = 0; 24 24 ALLOCATE (rv1, float, Nx); 25 25 26 for (i = 0; i < Nx; i++) { 26 27 l = i + 1; … … 29 30 if (i < Ny) { 30 31 for (k = i; k < Ny; k++) scale += fabs(a[k*Nx + i]); 31 if (scale ) {32 if (scale > 0.0) { 32 33 for (k = i; k < Ny; k++) { 33 34 a[k*Nx + i] /= scale; … … 35 36 } 36 37 f = a[i*Nx + i]; 37 g = -FSIGN(sqrt(s), f); 38 g = sqrt(s); 39 if (f > 0.0) { g = -g; } 38 40 h = f*g - s; 39 41 a[i*Nx + i] = f-g; 40 42 if (i != Nx - 1) { 41 43 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]; } 43 46 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]; } 45 48 } 46 49 } 47 for (k = i; k < Ny; k++) a[k*Nx + i] *= scale;50 for (k = i; k < Ny; k++) { a[k*Nx + i] *= scale; } 48 51 } 49 52 } … … 51 54 g = s = scale = 0.0; 52 55 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) { 55 58 for (k = l; k < Nx; k++) { 56 59 a[i*Nx + k] /= scale; … … 58 61 } 59 62 f = a[i*Nx + l]; 60 g = -FSIGN(sqrt(s), f); 63 g = sqrt(s); 64 if (f > 0.0) { g = -g; } 61 65 h = f*g - s; 62 66 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; } 64 68 if (i != Ny - 1) { 65 69 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]; } 68 73 } 69 74 } 70 for (k = l; k < Nx; k++) a[i*Nx + k] *= scale;75 for (k = l; k < Nx; k++) { a[i*Nx + k] *= scale; } 71 76 } 72 77 } … … 76 81 for (i = Nx - 1; i >= 0; i--) { 77 82 if (i < Nx - 1) { 78 if (g ) {83 if (g != 0.0) { 79 84 /* isn't l == n to start?? */ 80 85 for (j = l; j < Nx; j++) v[j*Nx + i] = (a[i*Nx + j]/a[i*Nx + l])/g; 81 86 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]; 83 89 for (k = l; k < Nx; k++) v[k*Nx + j] += s*v[k*Nx + i]; 84 90 } 85 91 } 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; } 87 93 } 88 94 v[i*Nx + i] = 1.0; … … 93 99 l = i + 1; 94 100 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) { 98 103 g = 1.0/g; 99 104 if (i != Nx - 1) { 100 105 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];} 102 108 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; } 107 113 } 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] ++; 111 117 } 112 118 … … 126 132 c = 0.0; 127 133 s = 1.0; 128 for (i = l; i < k; i++) {134 for (i = l; i <= k; i++) { 129 135 f = s*rv1[i]; 130 136 if (fabs(f)+anorm != anorm) { … … 160 166 f = ((y-z)*(y+z) + (g-h)*(g+h))/(2.0*h*y); 161 167 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 163 174 c = s = 1.0; 164 for (j = l; j < nm; j++) {175 for (j = l; j <= nm; j++) { 165 176 i = j+1; 166 177 g = rv1[i]; … … 184 195 z = hypot(f, h); 185 196 w[j] = z; 186 if (z ) {197 if (z != 0.0) { 187 198 z = 1.0/z; 188 199 c = f*z;
Note:
See TracChangeset
for help on using the changeset viewer.
