Convert floating point operation to integer
Members - Reputation: 127
Posted 16 February 2012 - 01:20 AM
I have a forumlae, "((a / b) * (max - min)) + min", that needs to be converted to integer math rather than floating point. max and min are unsigned integers, and (a / b) results in a float (b is always greater than a, so a/b always ranges from 0.0 to 1.0).
How would I go about calculating the same result without using floating point math? I am sure the solution is simple, but I am at a total loss for how to do this.
Members - Reputation: 1634
Posted 16 February 2012 - 01:44 AM
Crossbones+ - Reputation: 2021
Posted 16 February 2012 - 07:26 AM
In integer math dealing with fractions of one, it is always best to do the multiplication first, then followed by the division, i.e. a * (max - min) / b + min. Also, depending on the logicyou are after, be wary of one-off errors that can occur, i.e. evaluate whether you would instead like to have a * (max - min + 1) / b + min.
if you multiply min at the end with b and then divide the whole equation you will end up with all products and addition operators being done in integer math, and the division by b will then give you the resulting float value.
You should see this as a maths equation nd then just apply the normal rules for addition and division, b*min/b = min. With that last addition you will postpone the eventual move into a float untill the very end and should still give you the same result.
(a * (max - min) + min * b) / b