x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)x + \left(\sqrt[3]{y} \cdot \sqrt[3]{y}\right) \cdot \left(\left(\sqrt[3]{y} \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)\right)double f(double x, double y, double z, double t) {
double r353522 = x;
double r353523 = y;
double r353524 = z;
double r353525 = r353523 * r353524;
double r353526 = t;
double r353527 = r353526 / r353523;
double r353528 = tanh(r353527);
double r353529 = r353522 / r353523;
double r353530 = tanh(r353529);
double r353531 = r353528 - r353530;
double r353532 = r353525 * r353531;
double r353533 = r353522 + r353532;
return r353533;
}
double f(double x, double y, double z, double t) {
double r353534 = x;
double r353535 = y;
double r353536 = cbrt(r353535);
double r353537 = r353536 * r353536;
double r353538 = z;
double r353539 = r353536 * r353538;
double r353540 = t;
double r353541 = r353540 / r353535;
double r353542 = tanh(r353541);
double r353543 = r353534 / r353535;
double r353544 = tanh(r353543);
double r353545 = r353542 - r353544;
double r353546 = r353539 * r353545;
double r353547 = r353537 * r353546;
double r353548 = r353534 + r353547;
return r353548;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 5.0 |
|---|---|
| Target | 2.1 |
| Herbie | 2.8 |
Initial program 5.0
rmApplied associate-*l*2.1
rmApplied sub-neg2.1
Applied distribute-lft-in2.1
rmApplied add-cube-cbrt2.5
Applied associate-*l*2.5
Simplified2.8
Final simplification2.8
herbie shell --seed 2020083
(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))))))