]> Repositorios git - scryer-prolog.git/commitdiff
(**)/2 should always evaluate to floating point (#558)
authorMark Thom <[email protected]>
Sat, 23 May 2020 18:24:00 +0000 (12:24 -0600)
committerMark Thom <[email protected]>
Sat, 23 May 2020 18:24:00 +0000 (12:24 -0600)
src/prolog/machine/arithmetic_ops.rs

index 5f14aadc912ac46721d1ffa56f35d2904f3e6d3b..d5f1c6944891fe967b9991067744a290dd2501b6 100644 (file)
@@ -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]