x + \left(y - x\right) \cdot \frac{z}{t}\begin{array}{l}
\mathbf{if}\;\frac{z}{t} = -\infty \lor \neg \left(\frac{z}{t} \le 4.9499281820475569 \cdot 10^{40}\right):\\
\;\;\;\;x + \left(\frac{z \cdot y}{t} - \frac{x \cdot z}{t}\right)\\
\mathbf{else}:\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r417011 = x;
double r417012 = y;
double r417013 = r417012 - r417011;
double r417014 = z;
double r417015 = t;
double r417016 = r417014 / r417015;
double r417017 = r417013 * r417016;
double r417018 = r417011 + r417017;
return r417018;
}
double f(double x, double y, double z, double t) {
double r417019 = z;
double r417020 = t;
double r417021 = r417019 / r417020;
double r417022 = -inf.0;
bool r417023 = r417021 <= r417022;
double r417024 = 4.949928182047557e+40;
bool r417025 = r417021 <= r417024;
double r417026 = !r417025;
bool r417027 = r417023 || r417026;
double r417028 = x;
double r417029 = y;
double r417030 = r417019 * r417029;
double r417031 = r417030 / r417020;
double r417032 = r417028 * r417019;
double r417033 = r417032 / r417020;
double r417034 = r417031 - r417033;
double r417035 = r417028 + r417034;
double r417036 = r417029 - r417028;
double r417037 = r417036 * r417021;
double r417038 = r417028 + r417037;
double r417039 = r417027 ? r417035 : r417038;
return r417039;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 1.9 |
|---|---|
| Target | 2.1 |
| Herbie | 1.7 |
if (/ z t) < -inf.0 or 4.949928182047557e+40 < (/ z t) Initial program 8.6
rmApplied add-cube-cbrt9.6
Applied *-un-lft-identity9.6
Applied times-frac9.6
Applied associate-*r*5.8
Simplified5.7
Taylor expanded around 0 7.4
if -inf.0 < (/ z t) < 4.949928182047557e+40Initial program 0.8
Final simplification1.7
herbie shell --seed 2019198 +o rules:numerics
(FPCore (x y z t)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:tickPosition from plot-0.2.3.4"
:herbie-target
(if (< (* (- y x) (/ z t)) -1013646692435.8867) (+ x (/ (- y x) (/ t z))) (if (< (* (- y x) (/ z t)) -0.0) (+ x (/ (* (- y x) z) t)) (+ x (/ (- y x) (/ t z)))))
(+ x (* (- y x) (/ z t))))