# difference between statement

Discussion in 'C Programming' started by ashu, May 3, 2012.

1. ### ashuGuest

Dear Sir ,
i am writing a simple C programme but i am facing a problem kindly
sort it out for me

#include<stdio.h>
#include<conio.h>

main()
{
float fahr,celsius;

celsius= -17;
fahr=celsius * (9/5) + 32;
printf("%3.1f\n",fahr);

getch();
}
Result is 15.0
but when i write: fahr=celsius * 9/5 + 32;
result is : 1.4
i can`t figure it out why 1st statement is not working.am i doing
something wrong.i am using dev C++ compiler .

ashu, May 3, 2012

2. ### John GordonGuest

This expression:

(9/5)

is composed entirely of integers, therefore it is computed using integer
math, which discards the fractional part and evaluates to 1.

So your program is really doing this calculation:

fahr = -17 * 1 + 32

Which evaluates to 15.

To fix this behavior, get in the habit of adding .0 after any number
that you want to be treated as a float, like so:

fahr = celsius * (9.0/5.0) + 32.0;

This will give the correct results.

(Your second example works because without the parentheses, the first
operation is to multiply celsius by 9. One of those numbers is a float,
so the calculation is done as a float. Then that result is divided by
five, and again one of the numbers is a float, so the calculation is done
as a float.)

John Gordon, May 3, 2012

3. ### James Dow AllenGuest

(9/5) is 1

Write something else, e.g. (9.0/5) or even (1.8)
if you want 1.8 instead of 1.
That statement happens to lead to a chain of
promotions that work as you intend.
Better, however, is to avoid confusion or
incorrectness by avoiding integer when you
want floats. Thus write
fahr=celsius * 9./5. + 32.;
and don't worry about promotions.
Oh, C++. That's that language two doors down the hall?
The language that magically handles typing for you?

That you have the above confusion and had to come
to the C forum (not a C++ forum) to get it corrected
tells us something about C++.

James

James Dow Allen, May 3, 2012
4. ### Fred KGuest

(9/5) equals 1 so celsius * (9/5) equals celsius

Fred K, May 3, 2012
5. ### BartCGuest

Using floating point constants instead, such as 9.0/5.0, otherwise integer
arithmetic can sometimes give these funny results (9/5 is 1 according to C).

BartC, May 3, 2012
6. ### ashuGuest

Thankx for all help

ashu, May 4, 2012