Modulus of a negative number

Discussion in 'C Programming' started by Jim Hunter, Feb 23, 2005.

  1. Jim Hunter

    Jim Hunter Guest

    Hello all,

    I have been reading K&R2, and it says that "the sign of the result for % [is]
    machine-dependent for negative operands." Does this mean that the absolute
    value of the result is guaranteed, but the sign isn't? Or does it mean that
    (for example) -100 % 3 == -1 on some machines and 2 on others? The latter
    behavior seems illogical to me, but I've been unable to find a definitive
    statement about this.

    Thanks in advance for satisfying my curiosity and for taking mercy on a
    newsgroup newbie. :)

    Jim
    Jim Hunter, Feb 23, 2005
    #1
    1. Advertising

  2. In article <>,
    Jim Hunter <> wrote:
    :I have been reading K&R2, and it says that "the sign of the result for % [is]
    :machine-dependent for negative operands." Does this mean that the absolute
    :value of the result is guaranteed, but the sign isn't?

    No.

    : Or does it mean that
    :(for example) -100 % 3 == -1 on some machines and 2 on others?

    Yes.

    : The latter
    :behavior seems illogical to me, but I've been unable to find a definitive
    :statement about this.

    How were you thinking it could work with the absolute value being right but
    the sign possibly being wrong? A positive value for % means that many
    from the beginning; a negative value for % means that many from the end.
    When the result isn't exactly half-way inbetween, changing the sign gives
    a dfiferent meaning.
    --
    *We* are now the times. -- Wim Wenders (WoD)
    Walter Roberson, Feb 24, 2005
    #2
    1. Advertising

  3. Jim Hunter wrote:
    >
    > I have been reading K&R2, and it says that "the sign of the result

    for %
    > [is] machine-dependent for negative operands." Does this mean that

    the
    > absolute value of the result is guaranteed, but the sign isn't?


    No. C89 gives an implementation two options if either operand to / (or
    %)
    are negative: round up, or round down (this includes round to zero
    which
    is _required_ by C99.) In either case, if the result is representable,
    the following must hold...

    a == (a/b)*b + (a%b)

    Examples...

    5 / -3 == -2 and 5 % -3 == -1
    or 5 / -3 == -1 and 5 % -3 == 2

    > Or does it mean that (for example) -100 % 3 == -1 on some machines
    > and 2 on others?


    Yes.

    > The latter behavior seems illogical to me,


    It's sometimes useful mathematically for the modulus to always be
    positive.
    This, and round towards zero, are the only mechanisms that you are
    likely
    to encounter. C89 just happens to give an implementation 8 possible
    variations.

    --
    Peter
    Peter Nilsson, Feb 24, 2005
    #3
  4. Jim Hunter

    ruang

    Joined:
    May 3, 2010
    Messages:
    1
    One simple example in which the positive number is more useful, is calculating time. For instance, if the current time is 1pm, and I want to figure out the time 2 hours ago, I would do the following:
    (1-2)%12 = -1%12 = 11
    which is the correct answer. In this case the answer of -1 does no good at all. The reason we want the positive answer in this case is because the time scale is cyclic from 0 to 12, no negative values. I would imagine many real-life examples in which some cyclic scale goes from 0 to some positive number, in which case would prefer to use the positive answer over the negative.
    ruang, May 4, 2010
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. August Karlstrom

    Modulus and negative operands

    August Karlstrom, Jan 12, 2006, in forum: C Programming
    Replies:
    4
    Views:
    412
    Eric Sosman
    Jan 12, 2006
  2. Dave Angel
    Replies:
    0
    Views:
    118
    Dave Angel
    Feb 19, 2013
  3. Ian Kelly
    Replies:
    0
    Views:
    105
    Ian Kelly
    Feb 19, 2013
  4. MRAB
    Replies:
    0
    Views:
    92
  5. Morten Engvoldsen

    Re: Verification of bank number using modulus 11

    Morten Engvoldsen, Feb 19, 2013, in forum: Python
    Replies:
    0
    Views:
    124
    Morten Engvoldsen
    Feb 19, 2013
Loading...

Share This Page