int32_t floor_divide(int32_t a, int32_t b) { if (a < 0 != b < 0) if (b < 0) return (a - b - 1) / b; else return (a - b + 1) / b; else return a / b; } #define DIV(a,b) (((a) < 0) != ((b) < 0)) ? \ ((b) < 0) ? ((a) - (b) - 1) / (b) : ((a) - (b) + 1) / (b) : (a) / (b) VS int32_t floor_divide(int32_t a, int32_t b) { if (a < 0 != b < 0) return (a - b + 1 - 2*(b < 0)) / b; else return a / b; } #define DIV(a,b) (((a) < 0) != ((b) < 0)) ? \ ((a) - (b) + 1 - 2*((b) < 0)) / (b) : (a) / (b)