2

Take for example time:

If we take a 12-hour clock, we'd get the following results

  • from 1 to 5 = 4
  • from 5 to 1 = 4
  • from 11 to 1 = 2
  • from 1 to 11 = 2

What is the most efficient way to do that?

Assuming the values are doubles.

Hrisip
  • 766
  • 3
  • 11

2 Answers2

2

Without using modulo operations. fabs is cheap.

double closest_dist_in_cycle(double a, double b, double cycle){
    double result = std::fabs(a - b);
    return std::min(result, cycle - result);
}

Reference:

How would fabs(double) be implemented on x86? Is it an expensive operation?

0

With mod being your cycle, and under the assumption that both input values are smaller than mod, you can use:

int x = std::min((mod + a - b) % mod, (mod - a + b) % mod);
goodvibration
  • 5,302
  • 1
  • 17
  • 43