x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)\left(y \cdot \tanh \left(\frac{t}{y}\right) + y \cdot \left(-\tanh \left(\frac{x}{y}\right)\right)\right) \cdot z + xdouble f(double x, double y, double z, double t) {
double r286616 = x;
double r286617 = y;
double r286618 = z;
double r286619 = r286617 * r286618;
double r286620 = t;
double r286621 = r286620 / r286617;
double r286622 = tanh(r286621);
double r286623 = r286616 / r286617;
double r286624 = tanh(r286623);
double r286625 = r286622 - r286624;
double r286626 = r286619 * r286625;
double r286627 = r286616 + r286626;
return r286627;
}
double f(double x, double y, double z, double t) {
double r286628 = y;
double r286629 = t;
double r286630 = r286629 / r286628;
double r286631 = tanh(r286630);
double r286632 = r286628 * r286631;
double r286633 = x;
double r286634 = r286633 / r286628;
double r286635 = tanh(r286634);
double r286636 = -r286635;
double r286637 = r286628 * r286636;
double r286638 = r286632 + r286637;
double r286639 = z;
double r286640 = r286638 * r286639;
double r286641 = r286640 + r286633;
return r286641;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.6 |
|---|---|
| Target | 1.8 |
| Herbie | 1.3 |
Initial program 4.6
Simplified1.7
rmApplied add-cube-cbrt2.1
Applied associate-*l*2.1
rmApplied fma-udef2.1
Simplified1.3
rmApplied sub-neg1.3
Applied distribute-lft-in1.3
Final simplification1.3
herbie shell --seed 2020036 +o rules:numerics
(FPCore (x y z t)
:name "SynthBasics:moogVCF from YampaSynth-0.2"
:precision binary64
:herbie-target
(+ x (* y (* z (- (tanh (/ t y)) (tanh (/ x y))))))
(+ x (* (* y z) (- (tanh (/ t y)) (tanh (/ x y))))))