When the result is representable, but a simple application of arithmetic
rules would result in overflow, e.g. ratio_multiply<ratio<INTMAX_MAX,2>,ratio<2,INTMAX_MAX>> can be reduced to ratio<1,1>, but
the direct result of ratio<INTMAX_MAX*2,INTMAX_MAX*2> would
result in overflow.

Boost.Ratio implements some simplifications in order to reduce the possibility
of overflow. The general ideas are:

The num and denratio<> fields are normalized.

Use the gcd of some of the possible products that can overflow, and simplify
before doing the product.

Use some equivalences relations that avoid addition or subtraction that
can overflow or underflow.

The library code was derived from Howard Hinnant's time2_demo
prototype. Many thanks to Howard for making his code available under the
Boost license. The original code was modified by Beman Dawes to conform to
Boost conventions.

Howard Hinnant, who is the real author of the library, has provided valuable
feedback and suggestions during the development of the library. In particular,
The ratio_io.hpp source has been adapted from the experimental header <ratio_io> from Howard Hinnant.

The acceptance review of Boost.Ratio took place between October 2nd and 11th
2010. Many thanks to Anthony Williams, the review manager, and to all the
reviewers: Bruno Santos, Joel Falcou, Robert Stewart, Roland Bock, Tom Tan
and Paul A. Bristol.

Thanks to Andrew Chinoff and Paul A. Bristol for his help polishing the documentation.