From 00729d03342eb9d3f138863c8a680ab34f414cbd Mon Sep 17 00:00:00 2001 From: Andrew Morris Date: Sun, 22 May 2022 21:43:15 +1000 Subject: [PATCH] Use trunc instead of signum+abs+floor --- src/vstc/virtual_machine/math.rs | 1 - src/vstc/virtual_machine/operations.rs | 4 ++-- src/vstc/virtual_machine/vs_array.rs | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/vstc/virtual_machine/math.rs b/src/vstc/virtual_machine/math.rs index b187a05..0e7fdef 100644 --- a/src/vstc/virtual_machine/math.rs +++ b/src/vstc/virtual_machine/math.rs @@ -339,7 +339,6 @@ static TANH: NativeFunction = NativeFunction { static TRUNC: NativeFunction = NativeFunction { fn_: |_this: &mut Val, params: Vec| -> Val { let x = param_to_number(params.get(0)); - // TODO: Use trunc to simplify signum * abs elsewhere return Val::Number(x.trunc()); } }; diff --git a/src/vstc/virtual_machine/operations.rs b/src/vstc/virtual_machine/operations.rs index 5096281..942d168 100644 --- a/src/vstc/virtual_machine/operations.rs +++ b/src/vstc/virtual_machine/operations.rs @@ -156,7 +156,7 @@ fn to_i32(x: f64) -> i32 { return 0; } - let int1 = ((x.signum() * x.abs().floor()) as i64) & 0xffffffff; + let int1 = (x.trunc() as i64) & 0xffffffff; return int1 as i32; } @@ -166,7 +166,7 @@ pub fn to_u32(x: f64) -> u32 { return 0; } - let int1 = ((x.signum() * x.abs().floor()) as i64) & 0xffffffff; + let int1 = (x.trunc() as i64) & 0xffffffff; return int1 as u32; } diff --git a/src/vstc/virtual_machine/vs_array.rs b/src/vstc/virtual_machine/vs_array.rs index 4ce6a3d..f067b94 100644 --- a/src/vstc/virtual_machine/vs_array.rs +++ b/src/vstc/virtual_machine/vs_array.rs @@ -103,8 +103,7 @@ impl ValTrait for ArrayPrototype { fn to_unchecked_wrapping_index(index: &Val, len: usize) -> isize { let index_num = index.to_number(); - let abs_index = index_num.abs(); - let mut floored_index = index_num.signum() * abs_index.floor(); + let mut floored_index = index_num.trunc(); let f64_len = len as f64; if floored_index < 0_f64 {