use crate::Number;
use super::Term;
pub struct FractionTerm<T: Number>
{
numerator: Box<dyn Term<T> + Send + Sync>,
denominator: Box<dyn Term<T> + Send + Sync>
}
impl<T: Number> FractionTerm<T>
{
pub fn new(numerator: Box<dyn Term<T> + Send + Sync>, denominator: Box<dyn Term<T> + Send + Sync>) -> FractionTerm<T>
{
return FractionTerm::<T> { numerator, denominator };
}
}
impl<T: Number> Term<T> for FractionTerm<T>
{
fn evaluate(&self, t: T) -> T
{
let d = self.denominator.evaluate(t);
if d == T::zero() {
panic!("Cannot divide by 0 in parametrized InverseTerm. Make sure the function you set as your denominator is never zero on your inputs.");
}
else
{
return self.numerator.evaluate(t) / d;
}
}
}