x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)x + \left(\sqrt[3]{z \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)} \cdot \left(\sqrt[3]{z \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)} \cdot y\right)\right) \cdot \sqrt[3]{\tanh \left(\frac{t}{y}\right) \cdot z + \left(-\tanh \left(\frac{x}{y}\right)\right) \cdot z}double f(double x, double y, double z, double t) {
double r217487 = x;
double r217488 = y;
double r217489 = z;
double r217490 = r217488 * r217489;
double r217491 = t;
double r217492 = r217491 / r217488;
double r217493 = tanh(r217492);
double r217494 = r217487 / r217488;
double r217495 = tanh(r217494);
double r217496 = r217493 - r217495;
double r217497 = r217490 * r217496;
double r217498 = r217487 + r217497;
return r217498;
}
double f(double x, double y, double z, double t) {
double r217499 = x;
double r217500 = z;
double r217501 = t;
double r217502 = y;
double r217503 = r217501 / r217502;
double r217504 = tanh(r217503);
double r217505 = r217499 / r217502;
double r217506 = tanh(r217505);
double r217507 = r217504 - r217506;
double r217508 = r217500 * r217507;
double r217509 = cbrt(r217508);
double r217510 = r217509 * r217502;
double r217511 = r217509 * r217510;
double r217512 = r217504 * r217500;
double r217513 = -r217506;
double r217514 = r217513 * r217500;
double r217515 = r217512 + r217514;
double r217516 = cbrt(r217515);
double r217517 = r217511 * r217516;
double r217518 = r217499 + r217517;
return r217518;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.7 |
|---|---|
| Target | 2.2 |
| Herbie | 2.5 |
Initial program 4.7
rmApplied associate-*l*2.2
rmApplied sub-neg2.2
Applied distribute-lft-in2.2
Simplified2.2
Simplified2.2
rmApplied add-cube-cbrt2.5
Applied associate-*r*2.5
Simplified2.5
Final simplification2.5
herbie shell --seed 2019325
(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))))))