X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fadt%2Fgaussjordan.c;h=c07faaa10de8728268d40a0cabf51a8d71050801;hb=e07b61c6ed5d198a484761f8a40a4f26520d964d;hp=f575a584a485e24c6731a3cd102744575a3888e2;hpb=911b30675bfe85e26cc1021d539323334bfd0db1;p=libfirm diff --git a/ir/adt/gaussjordan.c b/ir/adt/gaussjordan.c index f575a584a..c07faaa10 100644 --- a/ir/adt/gaussjordan.c +++ b/ir/adt/gaussjordan.c @@ -32,7 +32,6 @@ /* returns 0 if successful */ /* returns -1 if ill-conditioned matrix */ /*------------------------------------------------------*/ - #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -45,91 +44,96 @@ int firm_gaussjordansolve(double *A, double *vec, int nsize) { - int i, j, row, col, col2, biggest_r, biggest_c, t; - double big, temp, sum; - double *scramvec = xmalloc(nsize * sizeof(*scramvec)); - int *x = xmalloc(nsize * sizeof(*x)); + int i, j, row, col, col2, biggest_r = 0, biggest_c = 0, t; + double big, temp, sum; + double *scramvec = XMALLOCN(double, nsize); + int *x = XMALLOCN(int, nsize); + int res = 0; #define _A(row,col) A[(row)*nsize + (col)] - /* init x[] */ - for(i=0;i big) { - biggest_r = row; - biggest_c = col2; - big = temp; /* largest element left */ - } - } - } - if (big < SMALL) { - return (-1); - } - /* swap rows */ - for(i=0;i=0;i--) { - sum = 0; - for(j=i+1;j big) { + biggest_r = row; + biggest_c = col2; + big = temp; /* largest element left */ + } + } + } + if (big < SMALL) { + res = -1; + goto end; + } + + /* swap rows */ + for(i=0;i=0;i--) { + sum = 0; + for(j=i+1;j