From: Mark Thom Date: Sat, 23 May 2020 18:24:00 +0000 (-0600) Subject: (**)/2 should always evaluate to floating point (#558) X-Git-Tag: v0.8.127~68 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=53cb2af2025cdcf8333c368ec63292a1181b306b;p=scryer-prolog.git (**)/2 should always evaluate to floating point (#558) --- diff --git a/src/prolog/machine/arithmetic_ops.rs b/src/prolog/machine/arithmetic_ops.rs index 5f14aadc..d5f1c694 100644 --- a/src/prolog/machine/arithmetic_ops.rs +++ b/src/prolog/machine/arithmetic_ops.rs @@ -571,34 +571,7 @@ impl MachineState { return Err(self.error_form(MachineError::evaluation_error(EvalError::Undefined), stub)); } - match (n1, n2) { - (Number::Fixnum(n1), Number::Fixnum(n2)) => { - if let Ok(n2) = u32::try_from(n2) { - if let Some(result) = n1.checked_pow(n2) { - return Ok(Number::from(result)); - } - } - - let n1 = Integer::from(n1); - let n2 = Integer::from(n2); - - Ok(Number::from(binary_pow(n1, &n2))) - } - (Number::Fixnum(n1), Number::Integer(n2)) => { - let n1 = Integer::from(n1); - Ok(Number::from(binary_pow(n1, n2.as_ref()))) - } - (Number::Integer(n1), Number::Fixnum(n2)) => { - let n2 = Integer::from(n2); - Ok(Number::from(binary_pow(n1.as_ref().clone(), &n2))) - } - (Number::Integer(n1), Number::Integer(n2)) => { - Ok(Number::from(binary_pow(n1.as_ref().clone(), &*n2))) - } - (n1, n2) => { - self.float_pow(n1, n2) - } - } + self.float_pow(n1, n2) } #[inline]