Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

difference between statement

23 views
Skip to first unread message

ashu

unread,
May 3, 2012, 10:14:10 AM5/3/12
to
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 .

John Gordon

unread,
May 3, 2012, 10:40:07 AM5/3/12
to
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 A is for Amy, who fell down the stairs
gor...@panix.com B is for Basil, assaulted by bears
-- Edward Gorey, "The Gashlycrumb Tinies"

Fred K

unread,
May 3, 2012, 10:43:37 AM5/3/12
to
(9/5) equals 1 so celsius * (9/5) equals celsius

James Dow Allen

unread,
May 3, 2012, 10:41:22 AM5/3/12
to
On May 3, 9:14 pm, ashu <ashishmoury...@gmail.com> wrote:
>       fahr=celsius * (9/5) + 32;

(9/5) is 1

Write something else, e.g. (9.0/5) or even (1.8)
if you want 1.8 instead of 1.

> but when i write: fahr=celsius * 9/5 + 32;
> result is : 1.4

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.

> i am using dev C++ compiler

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

BartC

unread,
May 3, 2012, 11:23:26 AM5/3/12
to


"ashu" <ashishm...@gmail.com> wrote in message
news:b101f606-7c9f-49e0...@k10g2000pbk.googlegroups.com...

> #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

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

ashu

unread,
May 4, 2012, 7:25:35 AM5/4/12
to
Thankx for all help


0 new messages