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 \left(z \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)\right)} \cdot \sqrt[3]{y \cdot \left(z \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)\right)}\right) \cdot \sqrt[3]{\left(\sqrt[3]{y} \cdot \sqrt[3]{y}\right) \cdot \left(\sqrt[3]{y} \cdot \left(z \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)\right)\right)}double f(double x, double y, double z, double t) {
double r242627 = x;
double r242628 = y;
double r242629 = z;
double r242630 = r242628 * r242629;
double r242631 = t;
double r242632 = r242631 / r242628;
double r242633 = tanh(r242632);
double r242634 = r242627 / r242628;
double r242635 = tanh(r242634);
double r242636 = r242633 - r242635;
double r242637 = r242630 * r242636;
double r242638 = r242627 + r242637;
return r242638;
}
double f(double x, double y, double z, double t) {
double r242639 = x;
double r242640 = y;
double r242641 = z;
double r242642 = t;
double r242643 = r242642 / r242640;
double r242644 = tanh(r242643);
double r242645 = r242639 / r242640;
double r242646 = tanh(r242645);
double r242647 = r242644 - r242646;
double r242648 = r242641 * r242647;
double r242649 = r242640 * r242648;
double r242650 = cbrt(r242649);
double r242651 = r242650 * r242650;
double r242652 = cbrt(r242640);
double r242653 = r242652 * r242652;
double r242654 = r242652 * r242648;
double r242655 = r242653 * r242654;
double r242656 = cbrt(r242655);
double r242657 = r242651 * r242656;
double r242658 = r242639 + r242657;
return r242658;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.6 |
|---|---|
| Target | 1.9 |
| Herbie | 2.3 |
Initial program 4.6
rmApplied associate-*l*1.9
rmApplied add-cube-cbrt2.3
rmApplied add-cube-cbrt2.3
Applied associate-*l*2.3
Final simplification2.3
herbie shell --seed 2019323
(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))))))