*From*: Owen Taylor <otaylor redhat com>*To*: drlion-dated-1091219837 02c327 teepee ath cx*Cc*: gtk-devel-list gnome org*Subject*: Re: MATH_MOD: Include in GLib?*Date*: Mon, 26 Jul 2004 08:23:42 -0400

On Sun, 2004-07-25 at 23:39, Daniel Brockman wrote: > Hi, > > I've been using a macro called MOD as a modulus function with > different semantics than %. Specifically, I need -1 mod 3 to equal 2. > > #define MOD(x, m) ((x) >= 0 ? (x) % (m) : (m) + (x) % (m)) > > I haven't really seen this used anywhere else, although I assume that > it is pretty common since it is needed for normalizing any wrapping > values -- such as angles for which, e.g., -90° = 270°. > > My suggestion is that it be put in GLib right next to its more > generally applicable fellows MIN, MAX, and CLAMP. What do you think? While I agree that this interpretation of modulo is frequently useful, I'm not really sure it belongs in GLib. Code is probably going to be clearer if the definition is next to the use. Certainly calling it something like G_MOD() is not appropriate as much as I'd agree that the C standard is screwed up in this choice. I'm not sure what you would call it. You also usually want the equivalent division at the same time: DIV(x, d) (((x) >= 0 ? (x) / (m) : ((x) - (m) + 1) / (m)) It's worth noting that powers of two can be optimized for this: MOD(x, 1024) = x >> 10 DIV(x, 1024) = x & 1023 (One nice consequence of the change of PANGO_SCALE from 1000 to 1024) Which is perhaps one reason not to have a macro. Regards, Owen

**Attachment:
signature.asc**

**Follow-Ups**:**Re: MATH_MOD: Include in GLib?***From:*Jan Kratochvil

**Re: MATH_MOD: Include in GLib?***From:*Daniel Brockman

**References**:**MATH_MOD: Include in GLib?***From:*Daniel Brockman

[Date Prev][Date Next] [Thread Prev][Thread Next] [Thread Index] [Date Index] [Author Index]