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 r388389 = x;
double r388390 = y;
double r388391 = z;
double r388392 = r388390 * r388391;
double r388393 = t;
double r388394 = r388393 / r388390;
double r388395 = tanh(r388394);
double r388396 = r388389 / r388390;
double r388397 = tanh(r388396);
double r388398 = r388395 - r388397;
double r388399 = r388392 * r388398;
double r388400 = r388389 + r388399;
return r388400;
}
double f(double x, double y, double z, double t) {
double r388401 = x;
double r388402 = y;
double r388403 = t;
double r388404 = r388403 / r388402;
double r388405 = tanh(r388404);
double r388406 = r388402 * r388405;
double r388407 = z;
double r388408 = r388406 * r388407;
double r388409 = r388401 / r388402;
double r388410 = tanh(r388409);
double r388411 = -r388410;
double r388412 = r388402 * r388411;
double r388413 = r388412 * r388407;
double r388414 = r388408 + r388413;
double r388415 = r388401 + r388414;
return r388415;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.4 |
|---|---|
| Target | 2.0 |
| Herbie | 1.6 |
Initial program 4.4
rmApplied associate-*l*2.0
rmApplied add-cbrt-cube5.0
Simplified5.0
rmApplied sub-neg5.0
Applied distribute-lft-in5.0
Applied distribute-lft-in5.1
Simplified1.6
Simplified1.6
rmApplied associate-*r*1.6
Final simplification1.6
herbie shell --seed 2020027
(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))))))