472,956 Members | 2,600 Online

# 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
Aug 18 '08 #1
7 6696
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
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
Aug 18 '08 #2
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
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.
Aug 18 '08 #3
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,is my understanding of this true(positive division and
mod is guaranteed while negative is not)? thx for your help in

It depends on whether your implementation
conforms to C89 rules or C99 rules.
He specified C99.
Aug 18 '08 #4
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,sometimes i really don't know what the standards are.So
really thank you for ur help here.

Aug 18 '08 #5
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,sometimes i really don't know what the standards are.So
really thank you for ur help here.
http://www.open-std.org/jtc1/sc22/wg...docs/n1256.pdf

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

Bye, Jojo
Aug 18 '08 #6

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
Aug 19 '08 #7
jackie said:
>
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@