avoid using Rational