Tôi có vấn đề lạ và tôi không có đầu mối để theo dõi lý do. Tôi sẽ cố gắng mô tả rõ ràng vấn đề của tôi.Sự cố IComparer
Tôi đã một lớp RTree, trong lớp này, tôi muốn so sánh hai rectanlge (ở đây tôi gọi là phong bì, nó chứa MINX, MINY, Maxx, MAXY), vì vậy chúng tôi có một lớp Comparer như sau:
private class AnonymousXComparerImpl : IComparer
{
public AnonymousXComparerImpl()
{ }
public int Compare(object o1, object o2)
{
IEnvelope ea = (IEnvelope)((IBoundable)o1).Bounds;
IEnvelope eb = (IEnvelope)((IBoundable)o2).Bounds;
double a = (ea.MinX + ea.MaxX)/2d;
double b = (eb.MinX + eb.MaxX)/2d;
return a > b ? 1 : a < b ? -1 : 0;
}
}
Với bộ so sánh này, chúng tôi có thể duy trì một ArrayList của phong bì và sắp xếp nó một cách dễ dàng, các phong bì được thêm vào ngẫu nhiên. Khi chúng tôi gọi mã sau đây và chúng tôi đã gặp số
Không thể sắp xếp vì phương thức IComparer.Compare() trả về kết quả không phù hợp . Giá trị không so sánh với chính nó, hoặc một giá trị nhiều lần so với giá trị khác mang lại kết quả khác nhau .
sortedChildBoundables.Sort(new AnonymousXComparerImpl());
Dưới đây là phần kỳ lạ. Lỗi này chỉ xảy ra trong .net 4.0 không cài đặt VistualStudio. Nếu máy đã cài đặt VS hoặc .net 4.5, vấn đề này không thể tái chế lại.
Trong trường hợp này, tôi không thể hiểu tại sao điều đó xảy ra. Nó sẽ là tuyệt vời nếu bạn có bất kỳ kinh nghiệm về gỡ lỗi loại vấn đề, tôi đánh giá cao.
Xin cảm ơn, Howard
Điều duy nhất tôi có thể nghĩ đến ở đây là vấn đề điểm nổi có nghĩa là bình đẳng không hoàn toàn phù hợp cho cùng một mục, không có ý tưởng tại sao nó sẽ được cụ thể cho v4. Bạn đã thử thực hiện một mức độ làm tròn? –
Hãy thử sử dụng kiểu dữ liệu 'thập phân 'thay vì số double – Saravanan
Không có chủ đề nào khác có liên quan? Ngoài ra, chủ đề này có thể được quan tâm: http://stackoverflow.com/questions/6683059/are-floating-point-numbers-consistent-in-c-can-they-be –