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 + z \cdot \left(\left(-\tanh \left(\frac{x}{y}\right)\right) \cdot y\right)\right)double f(double x, double y, double z, double t) {
double r246240 = x;
double r246241 = y;
double r246242 = z;
double r246243 = r246241 * r246242;
double r246244 = t;
double r246245 = r246244 / r246241;
double r246246 = tanh(r246245);
double r246247 = r246240 / r246241;
double r246248 = tanh(r246247);
double r246249 = r246246 - r246248;
double r246250 = r246243 * r246249;
double r246251 = r246240 + r246250;
return r246251;
}
double f(double x, double y, double z, double t) {
double r246252 = x;
double r246253 = y;
double r246254 = t;
double r246255 = r246254 / r246253;
double r246256 = tanh(r246255);
double r246257 = r246253 * r246256;
double r246258 = z;
double r246259 = r246257 * r246258;
double r246260 = r246252 / r246253;
double r246261 = tanh(r246260);
double r246262 = -r246261;
double r246263 = r246262 * r246253;
double r246264 = r246258 * r246263;
double r246265 = r246259 + r246264;
double r246266 = r246252 + r246265;
return r246266;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.6 |
|---|---|
| Target | 2.1 |
| Herbie | 1.7 |
Initial program 4.6
rmApplied associate-*l*2.1
rmApplied add-cube-cbrt2.4
Applied associate-*l*2.4
rmApplied sub-neg2.4
Applied distribute-lft-in2.4
Applied distribute-lft-in2.5
Applied distribute-lft-in2.6
Simplified3.6
Simplified2.2
rmApplied associate-*r*1.7
Final simplification1.7
herbie shell --seed 2019305
(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))))))