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 r235701 = x;
double r235702 = y;
double r235703 = z;
double r235704 = r235702 * r235703;
double r235705 = t;
double r235706 = r235705 / r235702;
double r235707 = tanh(r235706);
double r235708 = r235701 / r235702;
double r235709 = tanh(r235708);
double r235710 = r235707 - r235709;
double r235711 = r235704 * r235710;
double r235712 = r235701 + r235711;
return r235712;
}
double f(double x, double y, double z, double t) {
double r235713 = z;
double r235714 = y;
double r235715 = t;
double r235716 = r235715 / r235714;
double r235717 = tanh(r235716);
double r235718 = x;
double r235719 = r235718 / r235714;
double r235720 = tanh(r235719);
double r235721 = r235717 - r235720;
double r235722 = r235714 * r235721;
double r235723 = r235713 * r235722;
double r235724 = r235723 + r235718;
return r235724;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.6 |
|---|---|
| Target | 2.1 |
| Herbie | 1.6 |
Initial program 4.6
rmApplied pow14.6
Applied pow14.6
Applied pow14.6
Applied pow-prod-down4.6
Applied pow-prod-down4.6
Simplified2.1
rmApplied pow12.1
Applied pow12.1
Applied pow-prod-down2.1
Applied pow12.1
Applied pow-prod-down2.1
Simplified1.6
Final simplification1.6
herbie shell --seed 2019195
(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))))))