10 #define MEASURE_TIME 1
13 // #define S1(i,j,k) B[j][i]=B[j][i]-L[j][k]*B[k][i]
14 // #define S2(i,j) B[j][i]=B[j][i]/L[j][j]
16 static double B
[NMAX
][NMAX
], L
[NMAX
][NMAX
];
17 static double BB
[NMAX
][NMAX
];
19 void trisolv(long N
) {
23 for (i
=0;i
<=N
-1;i
++) {
25 for (j
=0;j
<=N
-1;j
++) {
27 for (k
=0;k
<=j
-1;k
++) {
29 B
[j
][i
]=B
[j
][i
]-L
[j
][k
]*B
[k
][i
]; //S1 ;
33 B
[j
][i
]=B
[j
][i
]/L
[j
][j
]; // S2 ;
46 for (i
=0;i
<=N
-1;i
++) {
48 for (j
=0;j
<=N
-1;j
++) {
50 for (k
=0;k
<=j
-1;k
++) {
52 BB
[j
][i
]=BB
[j
][i
]-L
[j
][k
]*BB
[k
][i
]; //S1 ;
56 BB
[j
][i
]=BB
[j
][i
]/L
[j
][j
]; // S2 ;
72 for (i
= 0; i
< NMAX
; i
++) {
73 for (j
= 0; j
< NMAX
; j
++) {
74 B
[i
][j
] = BB
[i
][j
] = i
+j
;
75 L
[i
][j
] = (i
+j
+3.45) *i
*j
*0.5;
79 gettimeofday(&start
, NULL
);
81 gettimeofday(&end
, NULL
);
86 for (i
= 0; i
< NMAX
; i
++) {
87 for (j
= 0; j
< NMAX
; j
++) {
88 if (fabs(B
[i
][j
]/BB
[i
][j
] -1) > 10e-8) {
91 printf("Error: expected BB[%d][%d] = %lf found B[%d][%d] = %lf\t=>\tabs(a/b -1) = %lf\n",
92 i
, j
, BB
[i
][j
], i
, j
, B
[i
][j
], fabs(BB
[i
][j
]/B
[i
][j
] -1) );
98 printf("SELFTEST: TRISOLV ");
99 if(errors
!= 0) printf("FAILED with %d errors!\n", errors
);
100 else printf("SUCCESS!\n");
104 printf("Elapsed Time=%lf\n",
105 (end
.tv_sec
- start
.tv_sec
+
106 (double)(end
.tv_usec
- start
.tv_usec
)/1000000));
108 return (errors
!= 0);