A while back, I have implemented a package supporting unlimited-size computations in Solidity.
This package consists of the following libraries:
NaturalNum- a set of functions over natural numbers
RationalNum- a set of functions over rational numbers
NaturalNum handles the size-limit internally, thus allowing to rearrange any computation and achieve maximum accuracy without reducing the size of valid input range.
RationalNum maintains the entire expression as a rational number, thus allowing to avoid the rearrangement and implement the computation in its "native form".
Using the latter will typically be less cost-effective, hence it is advisable to use the former whenever performance is considered critical.
I hope you find it useful