x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)x + \left(z \cdot \left(\tanh \left(\frac{t}{y}\right) \cdot y\right) + z \cdot \left(\left(-\tanh \left(\frac{x}{y}\right)\right) \cdot y\right)\right)double f(double x, double y, double z, double t) {
double r342799 = x;
double r342800 = y;
double r342801 = z;
double r342802 = r342800 * r342801;
double r342803 = t;
double r342804 = r342803 / r342800;
double r342805 = tanh(r342804);
double r342806 = r342799 / r342800;
double r342807 = tanh(r342806);
double r342808 = r342805 - r342807;
double r342809 = r342802 * r342808;
double r342810 = r342799 + r342809;
return r342810;
}
double f(double x, double y, double z, double t) {
double r342811 = x;
double r342812 = z;
double r342813 = t;
double r342814 = y;
double r342815 = r342813 / r342814;
double r342816 = tanh(r342815);
double r342817 = r342816 * r342814;
double r342818 = r342812 * r342817;
double r342819 = r342811 / r342814;
double r342820 = tanh(r342819);
double r342821 = -r342820;
double r342822 = r342821 * r342814;
double r342823 = r342812 * r342822;
double r342824 = r342818 + r342823;
double r342825 = r342811 + r342824;
return r342825;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.5 |
|---|---|
| Target | 2.0 |
| Herbie | 1.7 |
Initial program 4.5
rmApplied associate-*l*2.0
rmApplied add-cube-cbrt2.3
Applied associate-*l*2.4
rmApplied sub-neg2.4
Applied distribute-lft-in2.4
Applied distribute-lft-in2.4
Applied distribute-lft-in2.5
Simplified3.0
Simplified1.7
Final simplification1.7
herbie shell --seed 2019208
(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))))))