docs: public boolean decompose( DMatrix4x4 Q ) {
  
  		// scale Q so that Q(3,3) = 1 to provide a uniform scaling
  		CommonOps_DDF4.scale(1.0/Q.a33,Q);
  
  		// TODO consider using eigen decomposition like it was suggested
  
  		// Directly extract from the definition of Q
  		// Q = [w -w*p;-p'*w p'*w*p]
  		// w = k*k'
  		k.a11 = Q.a11;k.a12 = Q.a12;k.a13 = Q.a13;
  		k.a21 = Q.a21;k.a22 = Q.a22;k.a23 = Q.a23;
  		k.a31 = Q.a31;k.a32 = Q.a32;k.a33 = Q.a33;
  
  		if( !CommonOps_DDF3.invert(k,w_inv) )
  			return false;
  		// force it to be positive definite. Solution will be of dubious value if this condition is triggered, but it
  		// seems to help much more often than it hurts
  		// I'm not sure if I flip these variables if others along the same row/col should be flipped too or not
  		k.set(w_inv);
  		k.a11 = Math.abs(k.a11);
  		k.a22 = Math.abs(k.a22);
  		k.a33 = Math.abs(k.a33);
  
  		if( !CommonOps_DDF3.cholU(k) )
  			return false;
  		if( !CommonOps_DDF3.invert(k,k) )
  			return false;
  		CommonOps_DDF3.divide(k,k.a33);
  
  		t.a1 = Q.a14; t.a2 = Q.a24; t.a3 = Q.a34;
  
  		CommonOps_DDF3.mult(w_inv, t, p);
  		CommonOps_DDF3.scale(-1,p);
  
  		CommonOps_DDF3.multTransB(k,k,w);
  
  		return true;
  	}