int main(int argc, char** argv) { int matrix_size; int silent = 0; int optchar; elem_t *a, *inv, *prod; elem_t eps; double error; double ratio; while ((optchar = getopt(argc, argv, "qt:")) != EOF) { switch (optchar) { case 'q': silent = 1; break; case 't': s_nthread = atoi(optarg); break; default: fprintf(stderr, "Error: unknown option '%c'.\n", optchar); return 1; } } if (optind + 1 != argc) { fprintf(stderr, "Error: wrong number of arguments.\n"); } matrix_size = atoi(argv[optind]); /* Error checking. */ assert(matrix_size >= 1); assert(s_nthread >= 1); eps = epsilon(); a = new_matrix(matrix_size, matrix_size); init_matrix(a, matrix_size, matrix_size); inv = invert_matrix(a, matrix_size); prod = multiply_matrices(a, matrix_size, matrix_size, inv, matrix_size, matrix_size); error = identity_error(prod, matrix_size); ratio = error / (eps * matrix_size); if (! silent) { printf("error = %g; epsilon = %g; error / (epsilon * n) = %g\n", error, eps, ratio); } if (isfinite(ratio) && ratio < 100) printf("Error within bounds.\n"); else printf("Error out of bounds.\n"); delete_matrix(prod); delete_matrix(inv); delete_matrix(a); return 0; }
int main(int argc, char** argv) { int matrix_size; int silent; elem_t *a, *inv, *prod; elem_t eps; double error; double ratio; matrix_size = (argc > 1) ? atoi(argv[1]) : 3; s_nthread = (argc > 2) ? atoi(argv[2]) : 3; silent = (argc > 3) ? atoi(argv[3]) : 0; eps = epsilon(); a = new_matrix(matrix_size, matrix_size); init_matrix(a, matrix_size, matrix_size); inv = invert_matrix(a, matrix_size); prod = multiply_matrices(a, matrix_size, matrix_size, inv, matrix_size, matrix_size); error = identity_error(prod, matrix_size); ratio = error / (eps * matrix_size); if (! silent) { printf("error = %g; epsilon = %g; error / (epsilon * n) = %g\n", error, eps, ratio); } if (ratio < 100) printf("Error within bounds.\n"); else printf("Error out of bounds.\n"); delete_matrix(prod); delete_matrix(inv); delete_matrix(a); return 0; }