Если я правильно прочитал, a и b не являются отрицательными, и они меньше 12.
#include <math.h>
#include <stdio.h>
double min( double a, double b ) {
return a < b ? a : b;
}
double dist( double a, double b ) {
return min(
fmod( 12+b-a, 12 ),
fmod( 12+a-b, 12 )
);
}
int main() {
printf("%f\n", dist(1, 2));
printf("%f\n", dist(2, 1));
printf("%f\n", dist(11, 0));
printf("%f\n", dist(0, 11));
printf("%f\n", dist(0.5, 11.5));
return 0;
}
, что упрощается до
double dist( double a, double b ) {
double diff = fmod( 12+a-b, 12 );
return diff <= 6 ? diff : 12-diff;
}