Guys,
I am having a problem with float division using PK51. I was wondering if anyone could explain this or has seen it before.
I have a float, and want to divide it by 36000. If I do this directly, I get strange results, even -ve numbers although all the variables are +ve.
accrued_seconds =(total_accrued_seconds/36000);
Both variables are floats, however, if I do the following
accrued_seconds = (unsigned long)(total_accrued_seconds/10); accrued_hours = (float)(accrued_seconds/3600);
I get the correct result. For some reason that I don't understand using too big a divisor in the first code causes an error but not a two step as in the second. I have also tried the two step without the cast to an unsigned long and I get the errored result.
I tired the same thing on GCC on a PC and of course it works fine.
Any clues anyone?
Cheers,
Dirk
then it is not abiding by the standard, which says it should have treated 36000 as 'long int'
Which makes it all the more important for the OP to answer the question raised upthread: is this happening with Keil C51, and if so, was its option "standard integer promotions" turned on? Because if it is, and it wasn't (in that order ;-), it's not really surprising that this happened. C51 doesn't promise ANSI compatibility in that mode, so code shouldn't expect it.