18 lines
324 B
Rust
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"),
|
|
}
|
|
}
|