x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)x + z \cdot \left(\left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right) \cdot y\right)double f(double x, double y, double z, double t) {
double r237382 = x;
double r237383 = y;
double r237384 = z;
double r237385 = r237383 * r237384;
double r237386 = t;
double r237387 = r237386 / r237383;
double r237388 = tanh(r237387);
double r237389 = r237382 / r237383;
double r237390 = tanh(r237389);
double r237391 = r237388 - r237390;
double r237392 = r237385 * r237391;
double r237393 = r237382 + r237392;
return r237393;
}
double f(double x, double y, double z, double t) {
double r237394 = x;
double r237395 = z;
double r237396 = t;
double r237397 = y;
double r237398 = r237396 / r237397;
double r237399 = tanh(r237398);
double r237400 = r237394 / r237397;
double r237401 = tanh(r237400);
double r237402 = r237399 - r237401;
double r237403 = r237402 * r237397;
double r237404 = r237395 * r237403;
double r237405 = r237394 + r237404;
return r237405;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.8 |
|---|---|
| Target | 2.1 |
| Herbie | 1.6 |
Initial program 4.8
rmApplied associate-*l*2.1
rmApplied add-cube-cbrt2.4
Applied associate-*l*2.4
rmApplied *-un-lft-identity2.4
Applied associate-*l*2.4
Simplified1.6
Final simplification1.6
herbie shell --seed 2019235
(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))))))