x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)\sqrt[3]{\tanh \left(\frac{x}{y}\right) \cdot \left(-z\right) + z \cdot \tanh \left(\frac{t}{y}\right)} \cdot \left(y \cdot \left(\sqrt[3]{\tanh \left(\frac{x}{y}\right) \cdot \left(-z\right) + z \cdot \tanh \left(\frac{t}{y}\right)} \cdot \sqrt[3]{\tanh \left(\frac{x}{y}\right) \cdot \left(-z\right) + z \cdot \tanh \left(\frac{t}{y}\right)}\right)\right) + xdouble f(double x, double y, double z, double t) {
double r18714087 = x;
double r18714088 = y;
double r18714089 = z;
double r18714090 = r18714088 * r18714089;
double r18714091 = t;
double r18714092 = r18714091 / r18714088;
double r18714093 = tanh(r18714092);
double r18714094 = r18714087 / r18714088;
double r18714095 = tanh(r18714094);
double r18714096 = r18714093 - r18714095;
double r18714097 = r18714090 * r18714096;
double r18714098 = r18714087 + r18714097;
return r18714098;
}
double f(double x, double y, double z, double t) {
double r18714099 = x;
double r18714100 = y;
double r18714101 = r18714099 / r18714100;
double r18714102 = tanh(r18714101);
double r18714103 = z;
double r18714104 = -r18714103;
double r18714105 = r18714102 * r18714104;
double r18714106 = t;
double r18714107 = r18714106 / r18714100;
double r18714108 = tanh(r18714107);
double r18714109 = r18714103 * r18714108;
double r18714110 = r18714105 + r18714109;
double r18714111 = cbrt(r18714110);
double r18714112 = r18714111 * r18714111;
double r18714113 = r18714100 * r18714112;
double r18714114 = r18714111 * r18714113;
double r18714115 = r18714114 + r18714099;
return r18714115;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.4 |
|---|---|
| Target | 1.9 |
| Herbie | 2.3 |
Initial program 4.4
rmApplied associate-*l*1.9
rmApplied sub-neg1.9
Applied distribute-lft-in1.9
rmApplied add-cube-cbrt2.3
Applied associate-*r*2.3
Final simplification2.3
herbie shell --seed 2019163
(FPCore (x y z t)
:name "SynthBasics:moogVCF from YampaSynth-0.2"
:herbie-target
(+ x (* y (* z (- (tanh (/ t y)) (tanh (/ x y))))))
(+ x (* (* y z) (- (tanh (/ t y)) (tanh (/ x y))))))