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, \left(\sqrt[3]{z \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)} \cdot \sqrt[3]{z \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)}\right) \cdot \sqrt[3]{z \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)}, x\right)double f(double x, double y, double z, double t) {
double r1007532 = x;
double r1007533 = y;
double r1007534 = z;
double r1007535 = r1007533 * r1007534;
double r1007536 = t;
double r1007537 = r1007536 / r1007533;
double r1007538 = tanh(r1007537);
double r1007539 = r1007532 / r1007533;
double r1007540 = tanh(r1007539);
double r1007541 = r1007538 - r1007540;
double r1007542 = r1007535 * r1007541;
double r1007543 = r1007532 + r1007542;
return r1007543;
}
double f(double x, double y, double z, double t) {
double r1007544 = y;
double r1007545 = z;
double r1007546 = t;
double r1007547 = r1007546 / r1007544;
double r1007548 = tanh(r1007547);
double r1007549 = x;
double r1007550 = r1007549 / r1007544;
double r1007551 = tanh(r1007550);
double r1007552 = r1007548 - r1007551;
double r1007553 = r1007545 * r1007552;
double r1007554 = cbrt(r1007553);
double r1007555 = r1007554 * r1007554;
double r1007556 = r1007555 * r1007554;
double r1007557 = fma(r1007544, r1007556, r1007549);
return r1007557;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 4.8 |
|---|---|
| Target | 2.0 |
| Herbie | 2.4 |
Initial program 4.8
Simplified2.0
rmApplied add-cube-cbrt2.4
Final simplification2.4
herbie shell --seed 2020034 +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))))))