\frac{x}{y} \cdot \left(z - t\right) + t\begin{array}{l}
\mathbf{if}\;t \le -3.949379547519634262898875242093193608455 \cdot 10^{-47}:\\
\;\;\;\;t + \frac{z - t}{\frac{y}{x}}\\
\mathbf{elif}\;t \le 9.442112243134707280154952477861642826064 \cdot 10^{-197}:\\
\;\;\;\;\frac{x \cdot \left(z - t\right)}{y} + t\\
\mathbf{else}:\\
\;\;\;\;t + \frac{z - t}{\frac{y}{x}}\\
\end{array}double f(double x, double y, double z, double t) {
double r22076358 = x;
double r22076359 = y;
double r22076360 = r22076358 / r22076359;
double r22076361 = z;
double r22076362 = t;
double r22076363 = r22076361 - r22076362;
double r22076364 = r22076360 * r22076363;
double r22076365 = r22076364 + r22076362;
return r22076365;
}
double f(double x, double y, double z, double t) {
double r22076366 = t;
double r22076367 = -3.9493795475196343e-47;
bool r22076368 = r22076366 <= r22076367;
double r22076369 = z;
double r22076370 = r22076369 - r22076366;
double r22076371 = y;
double r22076372 = x;
double r22076373 = r22076371 / r22076372;
double r22076374 = r22076370 / r22076373;
double r22076375 = r22076366 + r22076374;
double r22076376 = 9.442112243134707e-197;
bool r22076377 = r22076366 <= r22076376;
double r22076378 = r22076372 * r22076370;
double r22076379 = r22076378 / r22076371;
double r22076380 = r22076379 + r22076366;
double r22076381 = r22076377 ? r22076380 : r22076375;
double r22076382 = r22076368 ? r22076375 : r22076381;
return r22076382;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.2 |
|---|---|
| Target | 2.4 |
| Herbie | 2.4 |
if t < -3.9493795475196343e-47 or 9.442112243134707e-197 < t Initial program 0.9
Taylor expanded around 0 7.1
Simplified0.8
if -3.9493795475196343e-47 < t < 9.442112243134707e-197Initial program 4.9
rmApplied associate-*l/5.4
Final simplification2.4
herbie shell --seed 2019200 +o rules:numerics
(FPCore (x y z t)
:name "Numeric.Signal.Multichannel:$cget from hsignal-0.2.7.1"
:herbie-target
(if (< z 2.759456554562692e-282) (+ (* (/ x y) (- z t)) t) (if (< z 2.326994450874436e-110) (+ (* x (/ (- z t) y)) t) (+ (* (/ x y) (- z t)) t)))
(+ (* (/ x y) (- z t)) t))