x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)\mathsf{fma}\left(z, y \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right), x\right) + \left(z \cdot \mathsf{fma}\left(-\tanh \left(\frac{x}{y}\right), 1, \tanh \left(\frac{x}{y}\right)\right)\right) \cdot ydouble f(double x, double y, double z, double t) {
double r5409318 = x;
double r5409319 = y;
double r5409320 = z;
double r5409321 = r5409319 * r5409320;
double r5409322 = t;
double r5409323 = r5409322 / r5409319;
double r5409324 = tanh(r5409323);
double r5409325 = r5409318 / r5409319;
double r5409326 = tanh(r5409325);
double r5409327 = r5409324 - r5409326;
double r5409328 = r5409321 * r5409327;
double r5409329 = r5409318 + r5409328;
return r5409329;
}
double f(double x, double y, double z, double t) {
double r5409330 = z;
double r5409331 = y;
double r5409332 = t;
double r5409333 = r5409332 / r5409331;
double r5409334 = tanh(r5409333);
double r5409335 = x;
double r5409336 = r5409335 / r5409331;
double r5409337 = tanh(r5409336);
double r5409338 = r5409334 - r5409337;
double r5409339 = r5409331 * r5409338;
double r5409340 = fma(r5409330, r5409339, r5409335);
double r5409341 = -r5409337;
double r5409342 = 1.0;
double r5409343 = fma(r5409341, r5409342, r5409337);
double r5409344 = r5409330 * r5409343;
double r5409345 = r5409344 * r5409331;
double r5409346 = r5409340 + r5409345;
return r5409346;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 4.6 |
|---|---|
| Target | 2.1 |
| Herbie | 1.6 |
Initial program 4.6
rmApplied associate-*l*2.1
rmApplied *-un-lft-identity2.1
Applied add-sqr-sqrt29.1
Applied prod-diff29.1
Applied distribute-lft-in29.1
Applied distribute-rgt-in29.1
Applied associate-+r+29.1
Simplified1.6
Final simplification1.6
herbie shell --seed 2019156 +o rules:numerics
(FPCore (x y z t)
:name "SynthBasics:moogVCF from YampaSynth-0.2"
:herbie-target
(+ x (* y (* z (- (tanh (/ t y)) (tanh (/ x y))))))
(+ x (* (* y z) (- (tanh (/ t y)) (tanh (/ x y))))))