# HG changeset patch # User Teemu Piippo # Date 1409485133 -10800 # Node ID 6e03c68c81baf3e3ee6486ad03ba634c641c5794 # Parent 557cb07dbe57ce68363577af9e25fddec6d8547c - ring finder now also tries scaling by 10 (3.4, 6.4 -> 34, 64), fixed floating point math argghhhhhhhh diff -r 557cb07dbe57 -r 6e03c68c81ba src/basics.h --- a/src/basics.h Sun Aug 31 03:10:51 2014 +0300 +++ b/src/basics.h Sun Aug 31 14:38:53 2014 +0300 @@ -241,13 +241,13 @@ template inline bool IsZero (T a) { - return Abs (a) < 0.0001; + return Abs (a) < 0.00001; } template inline bool IsIntegral (T a) { - return IsZero (a - int (a)); + return (Abs (a - floor(a)) < 0.00001) or (Abs (a - ceil(a)) < 0.00001); } template diff -r 557cb07dbe57 -r 6e03c68c81ba src/macros.h --- a/src/macros.h Sun Aug 31 03:10:51 2014 +0300 +++ b/src/macros.h Sun Aug 31 14:38:53 2014 +0300 @@ -71,6 +71,8 @@ // ============================================================================= // #define elif(A) else if (A) +#define unless(A) if (not (A)) +#define until(A) while (not (A)) // ============================================================================= // diff -r 557cb07dbe57 -r 6e03c68c81ba src/ringFinder.cc --- a/src/ringFinder.cc Sun Aug 31 03:10:51 2014 +0300 +++ b/src/ringFinder.cc Sun Aug 31 14:38:53 2014 +0300 @@ -135,11 +135,18 @@ double r0f = r0 / scale; double r1f = r1 / scale; - if (qFuzzyCompare (floor (r0f), r0f) and qFuzzyCompare (floor (r1f), r1f)) + if (IsIntegral (r0f) and IsIntegral (r1f)) { r0 = r0f; r1 = r1f; } + // If the numbers are both at most one-decimal fractions, we can use a scale of 10 + elif (IsIntegral (r0 * 10) and IsIntegral (r1 * 10)) + { + scale = 0.1; + r0 *= 10; + r1 *= 10; + } } else {