From db38f091a80be22974404721b0157adceac5e87f Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sun, 3 Dec 2017 15:16:40 -0700 Subject: [PATCH] coerce rationals to floats before coercing floats to rationals. --- src/prolog/ast.rs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/prolog/ast.rs b/src/prolog/ast.rs index 720919f9..d684d176 100644 --- a/src/prolog/ast.rs +++ b/src/prolog/ast.rs @@ -484,14 +484,18 @@ impl NumberPair { } fn float_rational_pair(n1: OrderedFloat, n2: Ratio) -> NumberPair { - if let Some(r) = Ratio::from_float(n1.into_inner()) { - NumberPair::Rational(r, n2) - } else if n1.into_inner().is_sign_positive() { - NumberPair::Float(OrderedFloat(f64::infinity()), - OrderedFloat(f64::infinity())) - } else { - NumberPair::Float(OrderedFloat(f64::neg_infinity()), - OrderedFloat(f64::neg_infinity())) + match (n2.numer().to_f64(), n2.denom().to_f64()) { + (Some(num), Some(denom)) => + NumberPair::Float(n1, OrderedFloat(num / denom)), + _ => if let Some(r) = Ratio::from_float(n1.into_inner()) { + NumberPair::Rational(r, n2) + } else if n1.into_inner().is_sign_positive() { + NumberPair::Float(OrderedFloat(f64::infinity()), + OrderedFloat(f64::infinity())) + } else { + NumberPair::Float(OrderedFloat(f64::neg_infinity()), + OrderedFloat(f64::neg_infinity())) + } } } -- 2.54.0