SVD computation does not converge with float data types or may take a long time

Precision for SVD was hardcoded for double computation. Trying to perform SVD with a matrix of floats causes it to take a long long time. Setting precision based on type (lower precision for floats) solves this issue. This is the way it was back in OpenCV 2.3.1 and for some reason had been changed in OpenCV 2.4 and broke some real time code that needed SVD computation using floats instead of doubles.