# Help,how does division truncate?

Discussion in 'C Programming' started by jackie, Aug 18, 2008.

1. ### jackieGuest

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

jackie, Aug 18, 2008

2. ### James KuyperGuest

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.

James Kuyper, Aug 18, 2008

3. ### James KuyperGuest

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.

James Kuyper, Aug 18, 2008
4. ### jackieGuest

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.

jackie, Aug 18, 2008
5. ### Joachim SchmitzGuest

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/wg14/www/docs/n1256.pdf

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

Bye, Jojo

Joachim Schmitz, Aug 18, 2008
6. ### jackieGuest

> 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

jackie, Aug 19, 2008