difference between statement

A

ashu

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 .
 
J

John Gordon

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

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 .

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.)
 
J

James Dow Allen

      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
 
F

Fred K

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 .

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

BartC

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

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,566
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top