我需要一个函数dist(a,b)//0≤a,b< 12使用模12返回最短(绝对的)距离ala时钟算术. 所以,例如,
dist( 1,2 ) = dist( 2,1 ) = dist( 11,0 ) = dist( 0,11 ) = dist( 0.5,11.5 ) = 1
编辑:虽然这可以通过一些黑客攻击轻松完成,我觉得必须有一些直观的解决方案,可能使用fmod和modulo 6
解决方法
首先,最佳解决方案是非常重要的,需要一点思考.
float distMod12(float a,float b) { float diff = fabs( b - a ); return ( diff < 6 ) ? diff : 12 - diff; }
编辑:或者,
return MIN( diff,12 - diff ); // needs a MIN function