sr-rs/src/ops.rs

18 lines
324 B
Rust

use crate::ast::Op;
pub fn protected_div(a: f64, b: f64) -> f64 {
if b.abs() < 1e-12 { a } else { a / b }
}
pub fn apply_unary(op: Op, x: f64) -> f64 {
match op {
Op::Sin => x.sin(),
Op::Cos => x.cos(),
Op::Exp => x.exp(),
Op::Log => if x.abs() < 1e-12 { 0.0 } else { x.abs().ln() },
_ => unreachable!("not unary"),
}
}