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"), } }