我有一個奇怪的問題,我沒有線索來追蹤原因。我會盡量清楚地描述我的問題。IComparer問題
我有一個RTREE類,在這個類,我想比較兩個rectanlge(這裏我叫信封,它包含了minX,MINY,maxX的,美星),所以我們有一個比較器類如下:
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;
}
}
有了這個比較器,我們可以維護一個信封的ArrayList並輕鬆地排序,信封隨機添加。當我們調用下面的代碼,我們遇到的
無法排序因爲IComparer.Compare()方法返回 不一致的結果。要麼一個值不會與自身等值, 或者一個值反覆與另一個值進行比較會得到不同的 結果。
sortedChildBoundables.Sort(new AnonymousXComparerImpl());
這裏是怪異的一部分。此錯誤只出現在不安裝VistualStudio的.net 4.0中。如果機器安裝了VS或.net 4.5,則此問題無法再次重新生成。
在這種情況下,我不知道爲什麼會發生。如果你有任何關於調試這類問題的經驗,那將是非常棒的,我很欣賞。
感謝, 霍華德
我能想到的唯一的事情就是浮點問題,意思是相同的項目並不完全匹配,不知道爲什麼它會特定於v4。你是否嘗試過強化四捨五入? – 2013-05-08 07:52:51
嘗試使用'decimal'數據類型代替雙精度 – Saravanan 2013-05-08 07:55:51
有沒有其他線程參與?此外,這個線程可能是有趣的:http://stackoverflow.com/questions/6683059/are-floating-point-numbers-consistent-in-c-can-they-be – 2013-05-08 07:56:42