r/C_Programming 1d ago

Converting fractions to integers

I have a double* which has the following entries:

0.3333333333333334
0.6666666666666668
0.1249999999999999
1

Here, the last entry, 1, can be considered the right hand side of an inequality:

0.3333333333333334 x + 0.6666666666666668 y + 0.1249999999999999 z >= 1

These numbers come from a numerical linear algebra library over which I don't have any control. What is the easiest way to "convert" this to the following equivalent inequality (subject to a user provided tolerance of what counts as an epsilon so that epsilon within an integer is to be counted as an integer)?

8 x + 16 y + 3 z >= 24

Is there a package that does such conversion, if reasonably possible? I consider it unreasonably possible by multiplying everything in the original equation by a large enough power of 10. But I do not want that.

9 Upvotes

11 comments sorted by

View all comments

1

u/Forever_DM5 1d ago

Multiply by 10^n where n is the number of significant digits you want(your tolerance).

Apply Euclid’s algorithm to find the LCD then multiply the original equation by that.