x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)\begin{array}{l}
\mathbf{if}\;x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right) = -\infty:\\
\;\;\;\;\mathsf{fma}\left(y, \left(z \cdot \left(\sqrt[3]{\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)} \cdot \sqrt[3]{\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)}\right)\right) \cdot \sqrt[3]{\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)}, x\right)\\
\mathbf{elif}\;x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right) \le 1.972480810362636817765665532393837592151 \cdot 10^{305}:\\
\;\;\;\;x + \left(y \cdot z\right) \cdot \left(\tanh \left(\frac{t}{y}\right) - \tanh \left(\frac{x}{y}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;x - x \cdot z\\
\end{array}double f(double x, double y, double z, double t) {
double r199209 = x;
double r199210 = y;
double r199211 = z;
double r199212 = r199210 * r199211;
double r199213 = t;
double r199214 = r199213 / r199210;
double r199215 = tanh(r199214);
double r199216 = r199209 / r199210;
double r199217 = tanh(r199216);
double r199218 = r199215 - r199217;
double r199219 = r199212 * r199218;
double r199220 = r199209 + r199219;
return r199220;
}
double f(double x, double y, double z, double t) {
double r199221 = x;
double r199222 = y;
double r199223 = z;
double r199224 = r199222 * r199223;
double r199225 = t;
double r199226 = r199225 / r199222;
double r199227 = tanh(r199226);
double r199228 = r199221 / r199222;
double r199229 = tanh(r199228);
double r199230 = r199227 - r199229;
double r199231 = r199224 * r199230;
double r199232 = r199221 + r199231;
double r199233 = -inf.0;
bool r199234 = r199232 <= r199233;
double r199235 = cbrt(r199230);
double r199236 = r199235 * r199235;
double r199237 = r199223 * r199236;
double r199238 = r199237 * r199235;
double r199239 = fma(r199222, r199238, r199221);
double r199240 = 1.972480810362637e+305;
bool r199241 = r199232 <= r199240;
double r199242 = r199221 * r199223;
double r199243 = r199221 - r199242;
double r199244 = r199241 ? r199232 : r199243;
double r199245 = r199234 ? r199239 : r199244;
return r199245;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 4.8 |
|---|---|
| Target | 2.1 |
| Herbie | 2.2 |
if (+ x (* (* y z) (- (tanh (/ t y)) (tanh (/ x y))))) < -inf.0Initial program 64.0
Simplified2.3
rmApplied add-cube-cbrt3.3
Applied associate-*r*3.3
if -inf.0 < (+ x (* (* y z) (- (tanh (/ t y)) (tanh (/ x y))))) < 1.972480810362637e+305Initial program 0.6
if 1.972480810362637e+305 < (+ x (* (* y z) (- (tanh (/ t y)) (tanh (/ x y))))) Initial program 59.4
Simplified21.1
Taylor expanded around inf 33.1
Final simplification2.2
herbie shell --seed 2019235 +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))))))