x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)\mathsf{fma}\left(y, \tanh \left(\frac{t}{y}\right) \cdot z + \left(-\tanh \left(\frac{x}{y}\right)\right) \cdot z, x\right)double f(double x, double y, double z, double t) {
double r447246 = x;
double r447247 = y;
double r447248 = z;
double r447249 = r447247 * r447248;
double r447250 = t;
double r447251 = r447250 / r447247;
double r447252 = tanh(r447251);
double r447253 = r447246 / r447247;
double r447254 = tanh(r447253);
double r447255 = r447252 - r447254;
double r447256 = r447249 * r447255;
double r447257 = r447246 + r447256;
return r447257;
}
double f(double x, double y, double z, double t) {
double r447258 = y;
double r447259 = t;
double r447260 = r447259 / r447258;
double r447261 = tanh(r447260);
double r447262 = z;
double r447263 = r447261 * r447262;
double r447264 = x;
double r447265 = r447264 / r447258;
double r447266 = tanh(r447265);
double r447267 = -r447266;
double r447268 = r447267 * r447262;
double r447269 = r447263 + r447268;
double r447270 = fma(r447258, r447269, r447264);
return r447270;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 4.3 |
|---|---|
| Target | 2.1 |
| Herbie | 2.0 |
Initial program 4.3
Simplified2.0
rmApplied sub-neg2.0
Applied distribute-lft-in2.0
Simplified2.0
Simplified2.0
Final simplification2.0
herbie shell --seed 2020045 +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))))))