]> Repositorios git - scryer-prolog.git/commitdiff
fix floor for f64 (#1223)
authorMark Thom <[email protected]>
Tue, 18 Jan 2022 05:04:10 +0000 (22:04 -0700)
committerMark Thom <[email protected]>
Tue, 18 Jan 2022 05:04:10 +0000 (22:04 -0700)
crates/instructions-template/src/lib.rs
src/arithmetic.rs

index 76725c04d32d6d48dc65541e28e9cb8fa2149c9a..c4c821b483a3d28e0de8aa442fd2073979bbac63 100644 (file)
@@ -617,83 +617,83 @@ enum InstructionTemplate {
     #[strum_discriminants(strum(props(Arity = "1", Name = "default_trust_me")))]
     TryMeElse(usize),
     // arithmetic instruction
-    #[strum_discriminants(strum(props(Arity = "3", Name = "add")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "add")))]
     Add(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "sub")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "sub")))]
     Sub(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "mul")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "mul")))]
     Mul(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "pow")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "pow")))]
     Pow(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "int_pow")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "int_pow")))]
     IntPow(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "i_div")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "i_div")))]
     IDiv(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "max")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "max")))]
     Max(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "min")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "min")))]
     Min(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "int_floor_div")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "int_floor_div")))]
     IntFloorDiv(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "r_div")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "r_div")))]
     RDiv(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "div")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "div")))]
     Div(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "shl")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "shl")))]
     Shl(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "shr")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "shr")))]
     Shr(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "xor")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "xor")))]
     Xor(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "and")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "and")))]
     And(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "or")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "or")))]
     Or(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "mod")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "mod")))]
     Mod(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "rem")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "rem")))]
     Rem(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "gcd")))]
+    #[strum_discriminants(strum(props(Arity = "2", Name = "gcd")))]
     Gcd(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "sign")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "sign")))]
     Sign(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "cos")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "cos")))]
     Cos(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "sin")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "sin")))]
     Sin(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "tan")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "tan")))]
     Tan(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "log")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "log")))]
     Log(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "exp")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "exp")))]
     Exp(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "acos")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "acos")))]
     ACos(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "asin")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "asin")))]
     ASin(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "atan")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "atan")))]
     ATan(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "3", Name = "atan2")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "atan2")))]
     ATan2(ArithmeticTerm, ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "sqrt")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "sqrt")))]
     Sqrt(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "abs")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "abs")))]
     Abs(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "float")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "float")))]
     Float(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "truncate")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "truncate")))]
     Truncate(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "round")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "round")))]
     Round(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "ceiling")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "ceiling")))]
     Ceiling(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "floor")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "floor")))]
     Floor(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "neg")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "neg")))]
     Neg(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "plus")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "plus")))]
     Plus(ArithmeticTerm, usize),
-    #[strum_discriminants(strum(props(Arity = "2", Name = "bitwise_complement")))]
+    #[strum_discriminants(strum(props(Arity = "1", Name = "bitwise_complement")))]
     BitwiseComplement(ArithmeticTerm, usize),
     // control instructions
     #[strum_discriminants(strum(props(Arity = "1", Name = "allocate")))]
index e909eed7f56bd88bf516d76ad387c42a5fc515a5..82212522b87381a234f5b3873f859e510e85736e 100644 (file)
@@ -345,7 +345,7 @@ impl<'a> ArithmeticEvaluator<'a> {
 pub(crate) fn rnd_i<'a>(n: &'a Number, arena: &mut Arena) -> Number {
     match n {
         &Number::Integer(_) | &Number::Fixnum(_) => *n,
-        &Number::Float(OrderedFloat(f)) => fixnum!(Number, f.round() as i64, arena),
+        &Number::Float(OrderedFloat(f)) => fixnum!(Number, f.floor() as i64, arena),
         &Number::Rational(ref r) => {
             let r_ref = r.fract_floor_ref();
             let (mut fract, mut floor) = (Rational::new(), Integer::new());