From 82ca49c840091663d20a626230b51d42b46f40b8 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Fri, 11 Aug 2017 19:05:46 -0400 Subject: [PATCH] Adjusted to avoid calls to `::greatest_common_divisor(numerator % denominator, denominator)` unless necessary. --- Storage/TimedEventLoop.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Storage/TimedEventLoop.cpp b/Storage/TimedEventLoop.cpp index 7badd9ee5..377af80fd 100644 --- a/Storage/TimedEventLoop.cpp +++ b/Storage/TimedEventLoop.cpp @@ -43,10 +43,12 @@ void TimedEventLoop::set_next_event_time_interval(Time interval) { (int64_t)subcycles_until_event_.clock_rate * (int64_t)input_clock_rate_ * (int64_t)interval.length + (int64_t)interval.clock_rate * (int64_t)subcycles_until_event_.length; - // Simplify now, to prepare for stuffing into possibly 32-bit quantities - int64_t common_divisor = NumberTheory::greatest_common_divisor(numerator % denominator, denominator); - denominator /= common_divisor; - numerator /= common_divisor; + // Simplify if necessary. + if(denominator > std::numeric_limits::max()) { + int64_t common_divisor = NumberTheory::greatest_common_divisor(numerator % denominator, denominator); + denominator /= common_divisor; + numerator /= common_divisor; + } // So this event will fire in the integral number of cycles from now, putting us at the remainder // number of subcycles