x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)\mathsf{fma}\left(y, z \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right), x\right)double f(double x, double y, double z, double t) {
double r431603 = x;
double r431604 = y;
double r431605 = z;
double r431606 = r431604 * r431605;
double r431607 = t;
double r431608 = r431607 / r431604;
double r431609 = tanh(r431608);
double r431610 = r431603 / r431604;
double r431611 = tanh(r431610);
double r431612 = r431609 - r431611;
double r431613 = r431606 * r431612;
double r431614 = r431603 + r431613;
return r431614;
}
double f(double x, double y, double z, double t) {
double r431615 = y;
double r431616 = z;
double r431617 = t;
double r431618 = r431617 / r431615;
double r431619 = tanh(r431618);
double r431620 = x;
double r431621 = r431620 / r431615;
double r431622 = tanh(r431621);
double r431623 = r431619 - r431622;
double r431624 = r431616 * r431623;
double r431625 = fma(r431615, r431624, r431620);
return r431625;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 4.8 |
|---|---|
| Target | 2.0 |
| Herbie | 2.0 |
Initial program 4.8
Simplified2.0
Final simplification2.0
herbie shell --seed 2020057 +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))))))