Bugfix: IK solving could go in infinite loop in SVD decomposition,
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Wed, 6 Feb 2008 16:45:51 +0000 (16:45 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Wed, 6 Feb 2008 16:45:51 +0000 (16:45 +0000)
the matrix library used didn't have a maximum iterations check for
degenerate cases.

intern/iksolver/intern/TNT/svd.h

index af281d0fce0e0ca1e6bed74ebc5b248337b5880a..9ca51fa265092cf3c78124aca7e9195789881e17 100644 (file)
 
 #include "tntmath.h"
 
+#define SVD_MAX_ITER 200
+
 namespace TNT
 {
 
 template <class MaTRiX, class VecToR >
-void SVD(MaTRiX &A, MaTRiX &U, VecToR &s, MaTRiX &V, VecToR &work1, VecToR &work2) {
+void SVD(MaTRiX &A, MaTRiX &U, VecToR &s, MaTRiX &V, VecToR &work1, VecToR &work2, int maxiter=SVD_MAX_ITER) {
 
        int m = A.num_rows();
        int n = A.num_cols();
@@ -216,7 +218,10 @@ void SVD(MaTRiX &A, MaTRiX &U, VecToR &s, MaTRiX &V, VecToR &work1, VecToR &work
                int kase=0;
                k=0;
 
-               // Here is where a test for too many iterations would go.
+               // Test for maximum iterations to avoid infinite loop
+               if(maxiter == 0)
+                       break;
+               maxiter--;
 
                // This section of the program inspects for
                // negligible elements in the s and e arrays.  On