coerce rationals to floats before coercing floats to rationals.

This commit is contained in:
Mark Thom
2017-12-03 15:16:40 -07:00
parent 775fe42781
commit db38f091a8

View File

@@ -484,14 +484,18 @@ impl NumberPair {
} }
fn float_rational_pair(n1: OrderedFloat<f64>, n2: Ratio<BigInt>) -> NumberPair { fn float_rational_pair(n1: OrderedFloat<f64>, n2: Ratio<BigInt>) -> NumberPair {
if let Some(r) = Ratio::from_float(n1.into_inner()) { match (n2.numer().to_f64(), n2.denom().to_f64()) {
NumberPair::Rational(r, n2) (Some(num), Some(denom)) =>
} else if n1.into_inner().is_sign_positive() { NumberPair::Float(n1, OrderedFloat(num / denom)),
NumberPair::Float(OrderedFloat(f64::infinity()), _ => if let Some(r) = Ratio::from_float(n1.into_inner()) {
OrderedFloat(f64::infinity())) NumberPair::Rational(r, n2)
} else { } else if n1.into_inner().is_sign_positive() {
NumberPair::Float(OrderedFloat(f64::neg_infinity()), NumberPair::Float(OrderedFloat(f64::infinity()),
OrderedFloat(f64::neg_infinity())) OrderedFloat(f64::infinity()))
} else {
NumberPair::Float(OrderedFloat(f64::neg_infinity()),
OrderedFloat(f64::neg_infinity()))
}
} }
} }