x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)z \cdot \left(y \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)\right) + xdouble f(double x, double y, double z, double t) {
double r19620794 = x;
double r19620795 = y;
double r19620796 = z;
double r19620797 = r19620795 * r19620796;
double r19620798 = t;
double r19620799 = r19620798 / r19620795;
double r19620800 = tanh(r19620799);
double r19620801 = r19620794 / r19620795;
double r19620802 = tanh(r19620801);
double r19620803 = r19620800 - r19620802;
double r19620804 = r19620797 * r19620803;
double r19620805 = r19620794 + r19620804;
return r19620805;
}
double f(double x, double y, double z, double t) {
double r19620806 = z;
double r19620807 = y;
double r19620808 = t;
double r19620809 = r19620808 / r19620807;
double r19620810 = tanh(r19620809);
double r19620811 = x;
double r19620812 = r19620811 / r19620807;
double r19620813 = tanh(r19620812);
double r19620814 = r19620810 - r19620813;
double r19620815 = r19620807 * r19620814;
double r19620816 = r19620806 * r19620815;
double r19620817 = r19620816 + r19620811;
return r19620817;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.4 |
|---|---|
| Target | 2.0 |
| Herbie | 1.5 |
Initial program 4.4
rmApplied associate-*l*2.0
rmApplied add-cube-cbrt2.3
Applied associate-*l*2.3
rmApplied pow12.3
Applied pow12.3
Applied pow-prod-down2.3
Applied pow12.3
Applied pow-prod-down2.3
Applied pow12.3
Applied pow12.3
Applied pow-prod-down2.3
Applied pow-prod-down2.3
Simplified1.5
Final simplification1.5
herbie shell --seed 2019169
(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))))))