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, z \cdot \left(\left(\left(\sqrt[3]{\tanh \left(\frac{t}{y}\right)} \cdot \sqrt[3]{\tanh \left(\frac{t}{y}\right)}\right) \cdot \sqrt[3]{\tanh \left(\frac{t}{y}\right)} - \tanh \left(\frac{x}{y}\right)\right) + \tanh \left(\frac{x}{y}\right) \cdot \left(\left(-1\right) + 1\right)\right), x\right)double f(double x, double y, double z, double t) {
double r334291 = x;
double r334292 = y;
double r334293 = z;
double r334294 = r334292 * r334293;
double r334295 = t;
double r334296 = r334295 / r334292;
double r334297 = tanh(r334296);
double r334298 = r334291 / r334292;
double r334299 = tanh(r334298);
double r334300 = r334297 - r334299;
double r334301 = r334294 * r334300;
double r334302 = r334291 + r334301;
return r334302;
}
double f(double x, double y, double z, double t) {
double r334303 = y;
double r334304 = z;
double r334305 = t;
double r334306 = r334305 / r334303;
double r334307 = tanh(r334306);
double r334308 = cbrt(r334307);
double r334309 = r334308 * r334308;
double r334310 = r334309 * r334308;
double r334311 = x;
double r334312 = r334311 / r334303;
double r334313 = tanh(r334312);
double r334314 = r334310 - r334313;
double r334315 = 1.0;
double r334316 = -r334315;
double r334317 = r334316 + r334315;
double r334318 = r334313 * r334317;
double r334319 = r334314 + r334318;
double r334320 = r334304 * r334319;
double r334321 = fma(r334303, r334320, r334311);
return r334321;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 4.7 |
|---|---|
| Target | 2.1 |
| Herbie | 2.2 |
Initial program 4.7
Simplified2.1
rmApplied add-cube-cbrt2.1
Applied add-cube-cbrt2.2
Applied prod-diff2.2
Simplified2.2
Simplified2.2
Final simplification2.2
herbie shell --seed 2020020 +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))))))