x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)x + \left(\left(y \cdot \tanh \left(\frac{t}{y}\right)\right) \cdot z + \left(y \cdot \left(-\tanh \left(\frac{x}{y}\right)\right)\right) \cdot z\right)double f(double x, double y, double z, double t) {
double r329970 = x;
double r329971 = y;
double r329972 = z;
double r329973 = r329971 * r329972;
double r329974 = t;
double r329975 = r329974 / r329971;
double r329976 = tanh(r329975);
double r329977 = r329970 / r329971;
double r329978 = tanh(r329977);
double r329979 = r329976 - r329978;
double r329980 = r329973 * r329979;
double r329981 = r329970 + r329980;
return r329981;
}
double f(double x, double y, double z, double t) {
double r329982 = x;
double r329983 = y;
double r329984 = t;
double r329985 = r329984 / r329983;
double r329986 = tanh(r329985);
double r329987 = r329983 * r329986;
double r329988 = z;
double r329989 = r329987 * r329988;
double r329990 = r329982 / r329983;
double r329991 = tanh(r329990);
double r329992 = -r329991;
double r329993 = r329983 * r329992;
double r329994 = r329993 * r329988;
double r329995 = r329989 + r329994;
double r329996 = r329982 + r329995;
return r329996;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.6 |
|---|---|
| Target | 2.1 |
| Herbie | 1.6 |
Initial program 4.6
rmApplied associate-*l*2.1
rmApplied pow12.1
rmApplied sub-neg2.1
Applied distribute-lft-in2.1
Applied distribute-lft-in2.3
Simplified1.7
Simplified1.7
rmApplied associate-*r*1.6
Final simplification1.6
herbie shell --seed 2020089
(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))))))