From 26ab00b44ce3c3306b8e0dad80a3d6820191f9e8 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Wed, 25 Jun 2008 04:54:21 -0400 Subject: Added delta to prevent floating point comparison and assignment math errors. --- AutoSizingList.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/AutoSizingList.cpp b/AutoSizingList.cpp index c9ea14c..5899f75 100644 --- a/AutoSizingList.cpp +++ b/AutoSizingList.cpp @@ -51,24 +51,25 @@ void AutoSizingList::rowChange() m_suggestedRatio3 = (double)suggestedWidth3 / (double)suggestedWidthTotal; bool b; double remain; - #define MAX .42 + #define DELTA .000000001 + #define MAX (.42 - DELTA) do { b = false; - if(m_suggestedRatio1 > MAX) { + if(m_suggestedRatio1 > MAX + DELTA) { remain = m_suggestedRatio1 + m_suggestedRatio2 + m_suggestedRatio3 - MAX; m_suggestedRatio1 = MAX; m_suggestedRatio2 = (m_suggestedRatio2 / (m_suggestedRatio2 + m_suggestedRatio3)) * remain; m_suggestedRatio3 = (m_suggestedRatio3 / (m_suggestedRatio2 + m_suggestedRatio3)) * remain; b = true; } - if(m_suggestedRatio2 > MAX) { + if(m_suggestedRatio2 > MAX + DELTA) { remain = m_suggestedRatio1 + m_suggestedRatio2 + m_suggestedRatio3 - MAX; m_suggestedRatio2 = MAX; m_suggestedRatio1 = (m_suggestedRatio1 / (m_suggestedRatio1 + m_suggestedRatio3)) * remain; m_suggestedRatio3 = (m_suggestedRatio3 / (m_suggestedRatio1 + m_suggestedRatio3)) * remain; b = true; } - if(m_suggestedRatio3 > MAX) { + if(m_suggestedRatio3 > MAX + DELTA) { remain = m_suggestedRatio1 + m_suggestedRatio2 + m_suggestedRatio3 - MAX; m_suggestedRatio3 = MAX; m_suggestedRatio2 = (m_suggestedRatio2 / (m_suggestedRatio2 + m_suggestedRatio1)) * remain; @@ -76,6 +77,7 @@ void AutoSizingList::rowChange() b = true; } } while(b); + #undef DELTA #undef MAX fixColumnSizes(); } -- cgit v1.2.3-59-g8ed1b