fix floor for f64 (#1223)
This commit is contained in:
@@ -617,83 +617,83 @@ enum InstructionTemplate {
|
|||||||
#[strum_discriminants(strum(props(Arity = "1", Name = "default_trust_me")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "default_trust_me")))]
|
||||||
TryMeElse(usize),
|
TryMeElse(usize),
|
||||||
// arithmetic instruction
|
// arithmetic instruction
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "add")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "add")))]
|
||||||
Add(ArithmeticTerm, ArithmeticTerm, usize),
|
Add(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "sub")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "sub")))]
|
||||||
Sub(ArithmeticTerm, ArithmeticTerm, usize),
|
Sub(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "mul")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "mul")))]
|
||||||
Mul(ArithmeticTerm, ArithmeticTerm, usize),
|
Mul(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "pow")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "pow")))]
|
||||||
Pow(ArithmeticTerm, ArithmeticTerm, usize),
|
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),
|
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),
|
IDiv(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "max")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "max")))]
|
||||||
Max(ArithmeticTerm, ArithmeticTerm, usize),
|
Max(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "min")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "min")))]
|
||||||
Min(ArithmeticTerm, ArithmeticTerm, usize),
|
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),
|
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),
|
RDiv(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "div")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "div")))]
|
||||||
Div(ArithmeticTerm, ArithmeticTerm, usize),
|
Div(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "shl")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "shl")))]
|
||||||
Shl(ArithmeticTerm, ArithmeticTerm, usize),
|
Shl(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "shr")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "shr")))]
|
||||||
Shr(ArithmeticTerm, ArithmeticTerm, usize),
|
Shr(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "xor")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "xor")))]
|
||||||
Xor(ArithmeticTerm, ArithmeticTerm, usize),
|
Xor(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "and")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "and")))]
|
||||||
And(ArithmeticTerm, ArithmeticTerm, usize),
|
And(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "or")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "or")))]
|
||||||
Or(ArithmeticTerm, ArithmeticTerm, usize),
|
Or(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "mod")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "mod")))]
|
||||||
Mod(ArithmeticTerm, ArithmeticTerm, usize),
|
Mod(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "rem")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "rem")))]
|
||||||
Rem(ArithmeticTerm, ArithmeticTerm, usize),
|
Rem(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "gcd")))]
|
#[strum_discriminants(strum(props(Arity = "2", Name = "gcd")))]
|
||||||
Gcd(ArithmeticTerm, ArithmeticTerm, usize),
|
Gcd(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "sign")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "sign")))]
|
||||||
Sign(ArithmeticTerm, usize),
|
Sign(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "cos")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "cos")))]
|
||||||
Cos(ArithmeticTerm, usize),
|
Cos(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "sin")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "sin")))]
|
||||||
Sin(ArithmeticTerm, usize),
|
Sin(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "tan")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "tan")))]
|
||||||
Tan(ArithmeticTerm, usize),
|
Tan(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "log")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "log")))]
|
||||||
Log(ArithmeticTerm, usize),
|
Log(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "exp")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "exp")))]
|
||||||
Exp(ArithmeticTerm, usize),
|
Exp(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "acos")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "acos")))]
|
||||||
ACos(ArithmeticTerm, usize),
|
ACos(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "asin")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "asin")))]
|
||||||
ASin(ArithmeticTerm, usize),
|
ASin(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "atan")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "atan")))]
|
||||||
ATan(ArithmeticTerm, usize),
|
ATan(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "3", Name = "atan2")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "atan2")))]
|
||||||
ATan2(ArithmeticTerm, ArithmeticTerm, usize),
|
ATan2(ArithmeticTerm, ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "sqrt")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "sqrt")))]
|
||||||
Sqrt(ArithmeticTerm, usize),
|
Sqrt(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "abs")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "abs")))]
|
||||||
Abs(ArithmeticTerm, usize),
|
Abs(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "float")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "float")))]
|
||||||
Float(ArithmeticTerm, usize),
|
Float(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "truncate")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "truncate")))]
|
||||||
Truncate(ArithmeticTerm, usize),
|
Truncate(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "round")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "round")))]
|
||||||
Round(ArithmeticTerm, usize),
|
Round(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "ceiling")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "ceiling")))]
|
||||||
Ceiling(ArithmeticTerm, usize),
|
Ceiling(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "floor")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "floor")))]
|
||||||
Floor(ArithmeticTerm, usize),
|
Floor(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "neg")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "neg")))]
|
||||||
Neg(ArithmeticTerm, usize),
|
Neg(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "plus")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "plus")))]
|
||||||
Plus(ArithmeticTerm, usize),
|
Plus(ArithmeticTerm, usize),
|
||||||
#[strum_discriminants(strum(props(Arity = "2", Name = "bitwise_complement")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "bitwise_complement")))]
|
||||||
BitwiseComplement(ArithmeticTerm, usize),
|
BitwiseComplement(ArithmeticTerm, usize),
|
||||||
// control instructions
|
// control instructions
|
||||||
#[strum_discriminants(strum(props(Arity = "1", Name = "allocate")))]
|
#[strum_discriminants(strum(props(Arity = "1", Name = "allocate")))]
|
||||||
|
|||||||
@@ -345,7 +345,7 @@ impl<'a> ArithmeticEvaluator<'a> {
|
|||||||
pub(crate) fn rnd_i<'a>(n: &'a Number, arena: &mut Arena) -> Number {
|
pub(crate) fn rnd_i<'a>(n: &'a Number, arena: &mut Arena) -> Number {
|
||||||
match n {
|
match n {
|
||||||
&Number::Integer(_) | &Number::Fixnum(_) => *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) => {
|
&Number::Rational(ref r) => {
|
||||||
let r_ref = r.fract_floor_ref();
|
let r_ref = r.fract_floor_ref();
|
||||||
let (mut fract, mut floor) = (Rational::new(), Integer::new());
|
let (mut fract, mut floor) = (Rational::new(), Integer::new());
|
||||||
|
|||||||
Reference in New Issue
Block a user