diff --git a/crates/simplexpr/src/eval.rs b/crates/simplexpr/src/eval.rs index ecb644e7..545f9567 100644 --- a/crates/simplexpr/src/eval.rs +++ b/crates/simplexpr/src/eval.rs @@ -345,6 +345,22 @@ fn call_expr_function(name: &str, args: Vec) -> Result Err(EvalError::WrongArgCount(name.to_string())), }, + "powi" => match args.as_slice() { + [num, n] => { + let num = num.as_f64()?; + let n = n.as_i32()?; + Ok(DynVal::from(f64::powi(num, n))) + } + _ => Err(EvalError::WrongArgCount(name.to_string())), + }, + "powf" => match args.as_slice() { + [num, n] => { + let num = num.as_f64()?; + let n = n.as_f64()?; + Ok(DynVal::from(f64::powf(num, n))) + } + _ => Err(EvalError::WrongArgCount(name.to_string())), + }, "sin" => match args.as_slice() { [num] => { let num = num.as_f64()?; diff --git a/docs/src/expression_language.md b/docs/src/expression_language.md index becb044c..150cf0ed 100644 --- a/docs/src/expression_language.md +++ b/docs/src/expression_language.md @@ -43,6 +43,7 @@ Supported currently are the following features: - `round(number, decimal_digits)`: Round a number to the given amount of decimals - `sin(number)`, `cos(number)`, `tan(number)`, `cot(number)`: Calculate the trigonometric value of a given number in **radians** - `min(a, b)`, `max(a, b)`: Get the smaller or bigger number out of two given numbers + - `powi(num, n)`, `powf(num, n)`: Raise number `num` to power `n`. `powi` expects `n` to be of type `i32` - `degtorad(number)`: Converts a number from degrees to radians - `radtodeg(number)`: Converts a number from radians to degrees - `replace(string, regex, replacement)`: Replace matches of a given regex in a string