My problem is limited to unsigned integers of 256 bits.
I have a value x
, and I need to descale it by the ratio n / d
, where n < d
.
The simple solution is of course x * n / d
, but the problem is that x * n
may overflow.
I am looking for any arithmetic trick which may help in reaching a result as accurate as possible.
Dividing each of n
and d
by gcd(n, d)
before calculating x * n / d
does not guarantee success.
Is there any process (iterative or other) which i can use in order to solve this problem?
Note that I am willing to settle on an inaccurate solution, but I'd need to be able to estimate the error.
uint256
(and there is no larger native type in case you're still wondering). – Homoeo