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

round result of floating point calcualtion

Hello,

I have a problem with the accuracy of the result when I divide 2 float values.

This is the line in my source Code:

 dds_word.long_dds = 2.147483648E16 / 7.1312E7 

The result which I get is 3.011392E8

The unrounded result is 3.0113916845E8

There is no difference when I work with float or double variables. Is there any possibility to get more accuracy?

Parents
  • That looks like you actually need arbitrary precision arithmetics A rough outline: recall how you learned to do multiplication and division on multi-digit numbers in elementary school. Apply same principles to very large numbers, using bytes or ints instead of decimal digits.

    Let's say we use unsigned 16-bit ints for "digits". That makes your dividend a 4-digit number, and all your divisors 2-digit numbers.

    So you would divide pairwise, compute remainders and accumulate results.

    There are multiple precision arithmetics packages out there that help with this --- I'm not aware of any working on 8051s though.

Reply
  • That looks like you actually need arbitrary precision arithmetics A rough outline: recall how you learned to do multiplication and division on multi-digit numbers in elementary school. Apply same principles to very large numbers, using bytes or ints instead of decimal digits.

    Let's say we use unsigned 16-bit ints for "digits". That makes your dividend a 4-digit number, and all your divisors 2-digit numbers.

    So you would divide pairwise, compute remainders and accumulate results.

    There are multiple precision arithmetics packages out there that help with this --- I'm not aware of any working on 8051s though.

Children