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(\left(\left(\sqrt[3]{\tanh \left(\frac{t}{y}\right)} \cdot \sqrt[3]{\tanh \left(\frac{t}{y}\right)}\right) \cdot \sqrt[3]{\tanh \left(\frac{t}{y}\right)} - \tanh \left(\frac{x}{y}\right)\right) + \tanh \left(\frac{x}{y}\right) \cdot \left(\left(-1\right) + 1\right)\right), x\right)double f(double x, double y, double z, double t) {
double r425772 = x;
double r425773 = y;
double r425774 = z;
double r425775 = r425773 * r425774;
double r425776 = t;
double r425777 = r425776 / r425773;
double r425778 = tanh(r425777);
double r425779 = r425772 / r425773;
double r425780 = tanh(r425779);
double r425781 = r425778 - r425780;
double r425782 = r425775 * r425781;
double r425783 = r425772 + r425782;
return r425783;
}
double f(double x, double y, double z, double t) {
double r425784 = y;
double r425785 = z;
double r425786 = t;
double r425787 = r425786 / r425784;
double r425788 = tanh(r425787);
double r425789 = cbrt(r425788);
double r425790 = r425789 * r425789;
double r425791 = r425790 * r425789;
double r425792 = x;
double r425793 = r425792 / r425784;
double r425794 = tanh(r425793);
double r425795 = r425791 - r425794;
double r425796 = 1.0;
double r425797 = -r425796;
double r425798 = r425797 + r425796;
double r425799 = r425794 * r425798;
double r425800 = r425795 + r425799;
double r425801 = r425785 * r425800;
double r425802 = fma(r425784, r425801, r425792);
return r425802;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 4.6 |
|---|---|
| Target | 2.0 |
| Herbie | 2.1 |
Initial program 4.6
Simplified2.0
rmApplied add-cube-cbrt2.1
Applied add-cube-cbrt2.2
Applied prod-diff2.2
Simplified2.1
Simplified2.1
Final simplification2.1
herbie shell --seed 2020100 +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))))))