x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)\left(\sqrt[3]{\mathsf{fma}\left(y, z \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right), x\right)} \cdot \sqrt[3]{\mathsf{fma}\left(y, z \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right), x\right)}\right) \cdot \sqrt[3]{\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 r266770 = x;
double r266771 = y;
double r266772 = z;
double r266773 = r266771 * r266772;
double r266774 = t;
double r266775 = r266774 / r266771;
double r266776 = tanh(r266775);
double r266777 = r266770 / r266771;
double r266778 = tanh(r266777);
double r266779 = r266776 - r266778;
double r266780 = r266773 * r266779;
double r266781 = r266770 + r266780;
return r266781;
}
double f(double x, double y, double z, double t) {
double r266782 = y;
double r266783 = z;
double r266784 = t;
double r266785 = r266784 / r266782;
double r266786 = tanh(r266785);
double r266787 = x;
double r266788 = r266787 / r266782;
double r266789 = tanh(r266788);
double r266790 = r266786 - r266789;
double r266791 = r266783 * r266790;
double r266792 = fma(r266782, r266791, r266787);
double r266793 = cbrt(r266792);
double r266794 = r266793 * r266793;
double r266795 = r266794 * r266793;
return r266795;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 4.6 |
|---|---|
| Target | 2.1 |
| Herbie | 3.3 |
Initial program 4.6
Simplified2.1
rmApplied add-cube-cbrt3.3
Final simplification3.3
herbie shell --seed 2019305 +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))))))