\frac{x}{y} \cdot \left(z - t\right) + t\begin{array}{l}
\mathbf{if}\;y \le -5.910237375042319 \cdot 10^{67} \lor \neg \left(y \le 4.0064465433570219 \cdot 10^{-49}\right):\\
\;\;\;\;\frac{x}{y} \cdot \left(z - t\right) + t\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x \cdot z}{y} - \frac{t \cdot x}{y}\right) + t\\
\end{array}double f(double x, double y, double z, double t) {
double r514377 = x;
double r514378 = y;
double r514379 = r514377 / r514378;
double r514380 = z;
double r514381 = t;
double r514382 = r514380 - r514381;
double r514383 = r514379 * r514382;
double r514384 = r514383 + r514381;
return r514384;
}
double f(double x, double y, double z, double t) {
double r514385 = y;
double r514386 = -5.910237375042319e+67;
bool r514387 = r514385 <= r514386;
double r514388 = 4.006446543357022e-49;
bool r514389 = r514385 <= r514388;
double r514390 = !r514389;
bool r514391 = r514387 || r514390;
double r514392 = x;
double r514393 = r514392 / r514385;
double r514394 = z;
double r514395 = t;
double r514396 = r514394 - r514395;
double r514397 = r514393 * r514396;
double r514398 = r514397 + r514395;
double r514399 = r514392 * r514394;
double r514400 = r514399 / r514385;
double r514401 = r514395 * r514392;
double r514402 = r514401 / r514385;
double r514403 = r514400 - r514402;
double r514404 = r514403 + r514395;
double r514405 = r514391 ? r514398 : r514404;
return r514405;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.0 |
|---|---|
| Target | 2.1 |
| Herbie | 1.5 |
if y < -5.910237375042319e+67 or 4.006446543357022e-49 < y Initial program 0.9
if -5.910237375042319e+67 < y < 4.006446543357022e-49Initial program 3.6
rmApplied add-cube-cbrt4.3
Applied associate-*l*4.3
rmApplied add-cube-cbrt4.2
Applied *-un-lft-identity4.2
Applied times-frac4.2
Applied cbrt-prod4.2
Taylor expanded around 0 2.3
Final simplification1.5
herbie shell --seed 2020060
(FPCore (x y z t)
:name "Numeric.Signal.Multichannel:$cget from hsignal-0.2.7.1"
:precision binary64
: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))