Help,how does division truncate?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • jackie

    Help,how does division truncate?

    I know in c that 3/2 gets 1 and 3%2 is also 1,and i think this is
    guaranteed by C99(is that true?),but on the other hand,-3/2 may be -1
    or -2,and -3%2 may be -1 and 1 respectively,it is implement-
    dependent,so,is my understanding of this true(positive division and
    mod is guaranteed while negative is not)? thx for your help in
    advance..
  • pete

    #2
    Re: Help,how does division truncate?

    jackie wrote:
    I know in c that 3/2 gets 1 and 3%2 is also 1,and i think this is
    guaranteed by C99(is that true?),but on the other hand,-3/2 may be -1
    or -2,and -3%2 may be -1 and 1 respectively,it is implement-
    dependent,so,is my understanding of this true(positive division and
    mod is guaranteed while negative is not)? thx for your help in
    advance..
    It depends on whether your implementation
    conforms to C89 rules or C99 rules.

    In C89, it is implementation defined:
    If either operand is negative,
    whether the result of the / operator is the largest integer
    less than or equal to the algebraic quotient
    or the smallest integer
    greater than or equal to the algebraic quotient
    is implementation-defined,
    as is the sign of the result of the % operator.


    In C99:
    [#6] When integers are divided, the result of the / operator
    is the algebraic quotient with any fractional part
    discarded.78) If the quotient a/b is representable, the
    expression (a/b)*b + a%b shall equal a.

    78)This is often called ``truncation toward zero''.

    --
    pete

    Comment

    • James Kuyper

      #3
      Re: Help,how does division truncate?

      jackie wrote:
      I know in c that 3/2 gets 1 and 3%2 is also 1,and i think this is
      guaranteed by C99(is that true?),but on the other hand,-3/2 may be -1
      or -2,and -3%2 may be -1 and 1 respectively,it is implement-
      dependent,so,is my understanding of this true(positive division and
      mod is guaranteed while negative is not)? thx for your help in
      advance..
      What you say was true for only in C90; in C99 section 6.5.5p6 says "When
      integers are divided, the result of the / operator is the algebraic
      quotient with any fractional part discarded.90)". The "90)" refers to
      footnote 90, which says: 'This is often called ‘‘truncation toward zero"'.

      What that means is that if the algebraic quotient is -1.5, the result -1
      (the .5 is discarded). Since 1.5 gets rounded to 1, and -1.5 gets
      rounded to -1, both rounded results are closer to 0 than the un-rounded
      results, which is why this is referred to as "toward zero".

      This causes problems for me. When I use negative numbers in such
      calculations, what I want, far more often than not, is what they call
      "rounding to negative infinity" - 1.5 gets rounded to 1, and -1.5 gets
      rounded to -2 - both results are closer to negative infinity than the
      number before rounding. However, standardizing it to round toward zero
      still makes things a lot easier for me than not standardizing it at all.

      Comment

      • James Kuyper

        #4
        Re: Help,how does division truncate?

        pete wrote:
        jackie wrote:
        >I know in c that 3/2 gets 1 and 3%2 is also 1,and i think this is
        >guaranteed by C99(is that true?),but on the other hand,-3/2 may be -1
        >or -2,and -3%2 may be -1 and 1 respectively,it is implement-
        >dependent,so,i s my understanding of this true(positive division and
        >mod is guaranteed while negative is not)? thx for your help in
        >advance..
        >
        It depends on whether your implementation
        conforms to C89 rules or C99 rules.
        He specified C99.

        Comment

        • jackie

          #5
          Re: Help,how does division truncate?

          Thanks pete and James Kuyper,ur replies really make life easier for
          me,actually,i am a student from China,and i don't have the opportunity
          to have a copy of C99,so when i try to make the program more
          portable,someti mes i really don't know what the standards are.So
          really thank you for ur help here.



          Comment

          • Joachim Schmitz

            #6
            Re: Help,how does division truncate?

            jackie wrote:
            Thanks pete and James Kuyper,ur replies really make life easier for
            me,actually,i am a student from China,and i don't have the opportunity
            to have a copy of C99,so when i try to make the program more
            portable,someti mes i really don't know what the standards are.So
            really thank you for ur help here.
            Google for n1256.pdf, in case Google censored that for you, try


            This the current C99 with TC1, TC2 and TC3 incorporated.

            Bye, Jojo


            Comment

            • jackie

              #7
              Re: Help,how does division truncate?

              Google for n1256.pdf, in case Google censored that for you, tryhttp://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
              >
              This the current C99 with TC1, TC2 and TC3 incorporated.
              >
              Bye, Jojo
              thank u Joachim Schmitz,but what's the meaning of TC1,2,3? Is it still
              a draft or it has already been approved? thx

              Comment

              • Richard Heathfield

                #8
                Re: Help,how does division truncate?

                jackie said:
                >
                >Google for n1256.pdf, in case Google censored that for you,
                >tryhttp://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
                >>
                >This the current C99 with TC1, TC2 and TC3 incorporated.
                >>
                >Bye, Jojo
                >
                thank u Joachim Schmitz,but what's the meaning of TC1,2,3?
                TCs are "Technical Corrigenda", i.e. corrections to the text of the
                Standard.

                --
                Richard Heathfield <http://www.cpax.org.uk >
                Email: -http://www. +rjh@
                Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
                "Usenet is a strange place" - dmr 29 July 1999

                Comment

                Working...