У меня есть кусок кода, который должен делать много вычислений, основанных на двойных значениях, что занимает слишком много времени. Могу ли я ускорить это, сбросив несколько десятичных знаков? если я использую форматтер для разбора двойника, не будет ли это делать сначала исчисление, а затем пролить лишние десятичные числа, так что ничего не получится? Каков наилучший способ сделать это?Java удваивает скорость вычислений
Просто что-то, чтобы получить представление:
double avgRatingForPreferredItem = (double) tempAverageRating.get(matrix.get(0).getItemID1())/matrix.size();
double avgRatingForRandomItem = (double) tempAverageRating.get(matrix.get(0).getItemID2())/matrix.size();
double numarator = 0;
for (MatrixColumn matrixCol : matrix) {
numarator += (matrixCol.getRatingForItemID1() - avgRatingForPreferredItem) * (matrixCol.getRatingForItemID2() - avgRatingForRandomItem);
}
double numitor = 0;
double numitorStanga = 0;
double numitorDreapta = 0;
for (MatrixColumn matrixCol : matrix) {
numitorStanga += (matrixCol.getRatingForItemID1() - avgRatingForPreferredItem) * (matrixCol.getRatingForItemID1() - avgRatingForPreferredItem);
numitorDreapta += (matrixCol.getRatingForItemID2() - avgRatingForRandomItem) * (matrixCol.getRatingForItemID2() - avgRatingForRandomItem);
}
numitor = Math.sqrt(numitorStanga * numitorDreapta);
double corelare = numarator/numitor;
Сколько матриц в большинстве случаев входит в матрицу? – harold
Вы работаете на новейшей JVM, доступной вам? –
Почему вы считаете, что вычисления с плавающей запятой являются причиной вашей проблемы с производительностью? Если я посмотрю на ваш код, это может быть класс 'MatrixColumn' и любой тип' matrix'. Вы называете эти методы много раз. И на сегодняшних настольных компьютерах эти вызовы методов, вероятно, дороже операций с плавающей запятой, даже если их реализация тривиальна. – Codo