On Tue, 28 Aug 2012 09:30:55 -0700 Guenter Roeck <linux@xxxxxxxxxxxx> wrote: > DIV_ROUND_CLOSEST returns a bad result for negative dividends: > DIV_ROUND_CLOSEST(-2, 2) = 0 > > Most of the time this does not matter. However, in the hardware monitoring > subsystem, it is sometimes used on integers which can be negative (such as > temperatures). Introduce new macro IDIV_ROUND_CLOSEST which also supports > negative dividends. > Can't we just fix DIV_ROUND_CLOSEST? That will make it a bit slower but it's not exactly a speed demon right now. And fixing DIV_ROUND_CLOSEST() might just fix other bugs that we don't know about yet. Also, the name IDIV_ROUND_CLOSEST doesn't communicate much at all. > +#define IDIV_ROUND_CLOSEST(x, divisor)( \ > +{ \ > + typeof(x) __x = x; \ > + typeof(divisor) __d = divisor; \ > + (((typeof(x))-1) >= 0 || (__x) >= 0) ? \ > + DIV_ROUND_CLOSEST((__x), (__d)) : \ > + (((__x) - ((__d) / 2)) / (__d)); \ > +} \ > +) And it doesn't help that the new "function" is undocumented. Yes, we screwed up with DIV_ROUND_CLOSEST(), but that doesn't mean we need to keep screwing up! _______________________________________________ lm-sensors mailing list lm-sensors@xxxxxxxxxxxxxx http://lists.lm-sensors.org/mailman/listinfo/lm-sensors