From 53cb2af2025cdcf8333c368ec63292a1181b306b Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sat, 23 May 2020 12:24:00 -0600 Subject: [PATCH] (**)/2 should always evaluate to floating point (#558) --- src/prolog/machine/arithmetic_ops.rs | 29 +--------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) 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] -- 2.54.0