This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Floating point calculations

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

Parents
  • 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?

Reply
  • 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?

Children