diff --git a/asklyphe-frontend/src/math.rs b/asklyphe-frontend/src/math.rs index 7103782..bfd6ab8 100644 --- a/asklyphe-frontend/src/math.rs +++ b/asklyphe-frontend/src/math.rs @@ -103,6 +103,8 @@ impl Op { Func::Square => args[0].eval().pow(&BigFloat::from_f64(2.0, PRECISION), PRECISION, RoundingMode::None, &mut CONST_CACHE.lock().unwrap()), Func::SquareRoot => args[0].eval().sqrt(PRECISION, RoundingMode::None), Func::Abs => args[0].eval().abs(), + Func::Deg => args[0].eval().mul(&Const::Pi.get_val().div(&BigFloat::from_f64(180.0, PRECISION), PRECISION, RoundingMode::None), PRECISION, RoundingMode::None), + Func::Rad => args[0].eval().mul(&BigFloat::from_f64(180.0, PRECISION).div(&Const::Pi.get_val(), PRECISION, RoundingMode::None), PRECISION, RoundingMode::None), _ => { error!("Got 1 params for func {:?} which expects 2 (should not be possible)", self); astro_float::NAN @@ -182,6 +184,8 @@ enum Func { Square, SquareRoot, Abs, + Deg, + Rad, } impl Func { @@ -200,6 +204,8 @@ impl Func { (Func::Square, &["square", "squared"]), (Func::SquareRoot, &["sqrt", "squareroot", "√"]), (Func::Abs, &["abs", "absolute"]), + (Func::Deg, &["deg", "degrees", "deg2rad"]), + (Func::Rad, &["rad", "radians", "rad2deg"]), ] } } @@ -281,8 +287,8 @@ impl Lexer<'_> { for (f, names) in Func::names() { for name in *names { let n_len = name.chars().count(); - if self.data_ptr.starts_with(name) && (len == n_len || !self.data_ptr.chars().nth(n_len).unwrap().is_alphabetic()) { - self.next_by = name.chars().count(); + if self.data_ptr.starts_with(name) && (len == n_len || !self.data_ptr.chars().nth(n_len).unwrap().is_alphanumeric()) { + self.next_by = n_len; return Ok(Token::Op(Op::Func(*f))); } } @@ -290,8 +296,8 @@ impl Lexer<'_> { for (f, names) in Const::names() { for name in *names { let n_len = name.chars().count(); - if self.data_ptr.starts_with(name) && (len == n_len || !self.data_ptr.chars().nth(n_len).unwrap().is_alphabetic()) { - self.next_by = name.chars().count(); + if self.data_ptr.starts_with(name) && (len == n_len || !self.data_ptr.chars().nth(n_len).unwrap().is_alphanumeric()) { + self.next_by = n_len; return Ok(Token::Atom(Atom::Const(*f))); } }