Я использую матрицу Джама для выполнения операций SVD. У меня есть пара вопросов относительно производительности.
Меня не беспокоит такая большая точность, и я думаю, что double более точен, чем Float, я прав? Если я использую float, отличный от double, насколько это улучшит производительность и снизит точность?
В матрице Jama используется одна функция, которую она вызывает много, используется функция double и функция Math.abs, которая требует много кучи и процессора. Если я изменю его на удвоение и удалим Math.abs, насколько это повлияет на производительность и результаты с точки зрения точности?
Вот математическая функция Джама:
public static double hypot(double a, double b) {
double r;
if (Math.abs(a) > Math.abs(b)) {
r = b/a;
r = Math.abs(a)*Math.sqrt(1+r*r);
} else if (b != 0) {
r = a/b;
r = Math.abs(b)*Math.sqrt(1+r*r);
} else {
r = 0.0;
}
return r;
}
Вот что я думаю сделать с этой функцией
public static float hypot(float a, float b) {
float r;
if (a > b) {
r = b/a;
r = (float) (a*Math.sqrt(1+r*r));
} else if (b != 0) {
r = a/b;
r = (float) (b*Math.sqrt(1+r*r));
} else {
r = 0;
}
return r;
}
Я не знаю, хороший это способ или нет.
Спасибо