We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello
I am trying to execute a floating point calculation with the 8051. Something like:
Result = Val1 * 0.75 + Val2 * 0.25
The C51 compiler can take that no problem, but it takes a long time to execute, would anyone know a smarter and faster way to execute this kind of code.
Thanks a lot. Laurent
If you do "Val1 * 75 + Val2 * 25" (all int) you only need one floating point operation to divide it by 100. I'm not a math wizard but if there's some clever shift to do the division you simplified it to int calculations.
Less accurate but: divide Val1 by 4 using shift and multiply by 3, divide Val2 by 4 using shift and add to first result. If you put the result into a float you can check the "fallen off" bits to compensate for the missing accuracy (using a lookup table; last two bits 00->add 0; 01-> add 0.25; 10->add 0.5; 11->add 0.75).
Depending on the accuracy and RAM size you might be able to get away with lookup tables for the whole calculation?
"you only need one floating point operation to divide it by 100."
You almost certainly don't even need that - just remember that your answer is in units of centi-whatevers!
See the last few posts in this Thread: http://www.keil.com/forum/docs/thread8278.asp