Sign in to follow this  

Convert floating point operation to integer

This topic is 2132 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello,

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.

Thanks :).

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
[quote name='clb' timestamp='1329378282' post='4913594']
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.
[/quote]

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.

Resulting equation:
(a * (max - min) + min * b) / b

Share this post


Link to post
Share on other sites

This topic is 2132 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this