У меня есть метод, который сравнивает любой список, заполненный объектами DMatch в соответствии с атрибутом distance. проблема ıA м имеющий теперь, расстояние я получаю от отсортированного списка что-то вроде:числовая точность теряется после сортировки списка с использованием компаратора
Debug: MainClass -> descriptorMatcher: Min_Dist: 0.070726834
Debug: MainClass -> descriptorMatcher: Max_Dist: 0.5799786
в то время как оно должно быть, как:
Info: MainClass -> descriptorMatcher: Max_Dist: 0.5799785852432251
Info: MainClass -> descriptorMatcher: Min_Dist: 0.07072683423757553
почему я теряю числовую точность и как избежать Это.
Код:
public static List<DMatch> getTopGoodMatches(List<DMatch> list, int startIndx, int range) {
if (list != null) {
if (!list.isEmpty()) {
if (range != 0) {
if ((startIndx + range) <= list.size()){
Log.V(TAG, "getTopGoodMatches", range + " match line(s) will be drawn");
Collections.sort(list, ascOrder);
return list.subList(startIndx, (startIndx + range));
} else {
Log.E(TAG, "getTopGoodMatches", "(startIndx + range) must be <= the total list size");
return null;
}
} else {
Log.E(TAG, "main", "range can not be zero");
return null;
}
} else {
Log.E(TAG, "getTopGoodMatches", "the list you passed to this method is empty, empty list can not be sorted.");
return null;
}
} else {
Log.E(TAG, "getTopGoodMatches", "the list you passed to this method is null, null object can not be sorted.");
return null;
}
}
private static Comparator<DMatch> ascOrder = new Comparator<DMatch>() {
public int compare(DMatch arg0, DMatch arg1) {
// TODO Auto-generated method stub
return Double.compare(arg0.distance, arg1.distance);
}
};
я не знаю, почему я не имею права использовать BigDecimal? каждый раз, когда я использую его, затмение выделяет его красным цветом и предлагает преобразовать его в float? любая идея пожалуйста – rmaik
BigDecimal - это класс. Таким образом, вы не можете использовать стандартные операторы для выполнения операций. Поэтому вместо + вы должны использовать .add вместо - .minus и так далее. Прочтите javadoc из BigDecimal –
, но, как вы видите в методе компаратора, опубликованном выше, у меня нет - или +, и когда я использую BigDecimal.compare .... я получаю ошибки – rmaik