By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
459,293 Members | 1,621 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 459,293 IT Pros & Developers. It's quick & easy.

Help,how does division truncate?

P: n/a
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..
Aug 18 '08 #1
Share this Question
Share on Google+
7 Replies


P: n/a
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
Aug 18 '08 #2

P: n/a
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.
Aug 18 '08 #3

P: n/a
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
advance..

It depends on whether your implementation
conforms to C89 rules or C99 rules.
He specified C99.
Aug 18 '08 #4

P: n/a
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

P: n/a
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.
Google for n1256.pdf, in case Google censored that for you, try
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

P: n/a
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
Aug 19 '08 #7

P: n/a
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
Aug 19 '08 #8

This discussion thread is closed

Replies have been disabled for this discussion.