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 r257145 = x;
double r257146 = y;
double r257147 = z;
double r257148 = r257146 * r257147;
double r257149 = t;
double r257150 = r257149 / r257146;
double r257151 = tanh(r257150);
double r257152 = r257145 / r257146;
double r257153 = tanh(r257152);
double r257154 = r257151 - r257153;
double r257155 = r257148 * r257154;
double r257156 = r257145 + r257155;
return r257156;
}
double f(double x, double y, double z, double t) {
double r257157 = x;
double r257158 = y;
double r257159 = t;
double r257160 = r257159 / r257158;
double r257161 = tanh(r257160);
double r257162 = r257158 * r257161;
double r257163 = z;
double r257164 = r257162 * r257163;
double r257165 = r257157 / r257158;
double r257166 = tanh(r257165);
double r257167 = -r257166;
double r257168 = r257158 * r257167;
double r257169 = r257168 * r257163;
double r257170 = r257164 + r257169;
double r257171 = r257157 + r257170;
return r257171;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 4.6 |
|---|---|
| Target | 1.8 |
| Herbie | 1.4 |
Initial program 4.6
rmApplied associate-*l*1.8
rmApplied sub-neg1.8
Applied distribute-lft-in1.8
Applied distribute-lft-in1.9
Simplified1.9
Simplified1.9
rmApplied associate-*r*1.5
rmApplied associate-*r*1.4
Final simplification1.4
herbie shell --seed 2020036
(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))))))