From 1e1fda8fccf4e1d946466d079fd038df20c3cb30 Mon Sep 17 00:00:00 2001 From: DragonGhost7 Date: Thu, 26 Oct 2023 23:15:50 -0400 Subject: [PATCH] added cot,sec, and csc trig functions and their inverse + hyperbolic versions --- src/eval.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/eval.rs b/src/eval.rs index 0715876..7e526db 100644 --- a/src/eval.rs +++ b/src/eval.rs @@ -170,6 +170,18 @@ impl<'text> Eval<'text> for PostfixExpr<'text> { ("tanh", [rad]) => Ok(rad.eval(state)?.tanh()), ("atan", [rad]) => Ok(rad.eval(state)?.atan()), ("atanh", [rad]) => Ok(rad.eval(state)?.atanh()), + ("cot", [rad]) => Ok(rad.eval(state)?.tan().recip()), + ("coth", [rad]) => Ok(rad.eval(state)?.tanh().recip()), + ("acot", [rad]) => Ok(std::f64::consts::FRAC_PI_2 - rad.eval(state)?.atan()), + ("acoth", [rad]) => Ok(0.5 * ( 2.0 /(rad.eval(state)? - 1.0)).ln_1p()), + ("sec", [rad]) => Ok(rad.eval(state)?.cos().recip()), + ("sech", [rad]) => Ok(rad.eval(state)?.cosh().recip()), + ("asec", [rad]) => Ok((rad.eval(state)?.recip()).acos()), + ("asech", [rad]) => Ok((rad.eval(state)?.recip() + ((rad.eval(state)?).powi(-2) - 1.0_f64).sqrt()).ln()), + ("csc", [rad]) => Ok(rad.eval(state)?.sin().recip()), + ("csch", [rad]) => Ok(rad.eval(state)?.sinh().recip()), + ("acsc", [rad]) => Ok((rad.eval(state)?.recip()).asin()), + ("acsch", [rad]) => Ok((rad.eval(state)?.recip() + ((rad.eval(state)?).powi(-2) + 1.0_f64).sqrt()).ln()), _ => Err(EvalError::InvalidFnCall(format!("{}", self))), }, }