Issue with fahrenheit conversion formula in C -
this question has answer here:
when writing program in c convert celsius fahrenheit, following formula gives incorrect output:
int fahr = 9 / 5 * celsius + 32;
now, understand issue 9/5 being interpreted integer, don't understand using double
or float
it still gives same incorrect output.
oddly enough following formula gives correct output despite setting type int
:
int fahr = celsius / 5 * 9 + 32;
furthermore, i've noticed simple below, when type set double
, still gives output 1.0 instead of 1.8:
double x = 9 / 5; printf("%lf\n", x);
i've read thread:
c program convert fahrenheit celsius
but still don't understand why int fahr = celsius / 5 * 9 + 32;
works not int fahr = 9/5 * celsius+32;
?
i still don't understand why int fahr = celsius / 5 * 9 + 32;
works not int fahr = 9/5 * celsius+32;
for former, declared celsius
float
or double
, making entire right side evaluate such. assuming used float
, works out this:
celsius / 5 * 9 + 32 (celsius / 5.0) * 9 + 32 (celsius / 5.0 * 9.0) + 32 (celsius / 5.0 * 9.0 + 32.0)
for latter, 9/5
integer arithmetic evaluates 1
before rest of math happens floating point. in case:
9 / 5 * celsius + 32 1 * celsius + 32 // because of this, incorrect answer celsius + 32 celsius + 32.0
note the type of left hand side irrelevant; right-hand side evaluated without regard that.
update: said celsius
int
, means happened lucky , test value multiple of 5
, giving correct integer result celsius / 5
before doing valid integer arithmetic rest of statement. in second example, being multiple of 5
doesn't you.
in case, know why got lucky, linked question gives answer need to have formula works when celsius
isn't multiple of 5
: use floating point math, demonstrated in of answers there.
Comments
Post a Comment