x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)\left(\left(y \cdot \tanh \left(\frac{t}{y}\right)\right) \cdot z + \left(z \cdot \tanh \left(\frac{x}{y}\right)\right) \cdot \left(-y\right)\right) + xdouble f(double x, double y, double z, double t) {
double r14713620 = x;
double r14713621 = y;
double r14713622 = z;
double r14713623 = r14713621 * r14713622;
double r14713624 = t;
double r14713625 = r14713624 / r14713621;
double r14713626 = tanh(r14713625);
double r14713627 = r14713620 / r14713621;
double r14713628 = tanh(r14713627);
double r14713629 = r14713626 - r14713628;
double r14713630 = r14713623 * r14713629;
double r14713631 = r14713620 + r14713630;
return r14713631;
}
double f(double x, double y, double z, double t) {
double r14713632 = y;
double r14713633 = t;
double r14713634 = r14713633 / r14713632;
double r14713635 = tanh(r14713634);
double r14713636 = r14713632 * r14713635;
double r14713637 = z;
double r14713638 = r14713636 * r14713637;
double r14713639 = x;
double r14713640 = r14713639 / r14713632;
double r14713641 = tanh(r14713640);
double r14713642 = r14713637 * r14713641;
double r14713643 = -r14713632;
double r14713644 = r14713642 * r14713643;
double r14713645 = r14713638 + r14713644;
double r14713646 = r14713645 + r14713639;
return r14713646;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.5 |
|---|---|
| Target | 2.1 |
| Herbie | 1.7 |
Initial program 4.5
rmApplied associate-*l*2.1
rmApplied add-cube-cbrt2.5
Applied associate-*l*2.5
rmApplied sub-neg2.5
Applied distribute-lft-in2.5
Applied distribute-lft-in2.6
Applied distribute-lft-in2.7
Simplified3.1
Simplified1.7
Final simplification1.7
herbie shell --seed 2019165
(FPCore (x y z t)
:name "SynthBasics:moogVCF from YampaSynth-0.2"
:herbie-target
(+ x (* y (* z (- (tanh (/ t y)) (tanh (/ x y))))))
(+ x (* (* y z) (- (tanh (/ t y)) (tanh (/ x y))))))