val 0.6.0

An arbitrary precision calculator language
Documentation
use super::*;

builtin! {
  Acot {
    name: "acot",
    arity: BuiltinArity::Exact(1),
    call(payload) {
      let argument = payload.number(0)?;

      let pi_div_2 = Number::Approx(
        Float::with_val_round(
          payload.config.precision(),
          Constant::Pi,
          payload.config.rounding_mode,
        )
        .0,
      )
      .div(&Number::from(2_i64), payload.config)
      .unwrap();

      Ok(Value::Number(
        pi_div_2.sub(&argument.atan(payload.config), payload.config),
      ))
    }
  }
}