x + \frac{y \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;\frac{y \cdot \left(z - t\right)}{a - t} = -\infty \lor \neg \left(\frac{y \cdot \left(z - t\right)}{a - t} \le 4.549710930030010292882411291755713427753 \cdot 10^{254}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a - t}, z - t, x\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a - t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r474016 = x;
double r474017 = y;
double r474018 = z;
double r474019 = t;
double r474020 = r474018 - r474019;
double r474021 = r474017 * r474020;
double r474022 = a;
double r474023 = r474022 - r474019;
double r474024 = r474021 / r474023;
double r474025 = r474016 + r474024;
return r474025;
}
double f(double x, double y, double z, double t, double a) {
double r474026 = y;
double r474027 = z;
double r474028 = t;
double r474029 = r474027 - r474028;
double r474030 = r474026 * r474029;
double r474031 = a;
double r474032 = r474031 - r474028;
double r474033 = r474030 / r474032;
double r474034 = -inf.0;
bool r474035 = r474033 <= r474034;
double r474036 = 4.5497109300300103e+254;
bool r474037 = r474033 <= r474036;
double r474038 = !r474037;
bool r474039 = r474035 || r474038;
double r474040 = r474026 / r474032;
double r474041 = x;
double r474042 = fma(r474040, r474029, r474041);
double r474043 = r474041 + r474033;
double r474044 = r474039 ? r474042 : r474043;
return r474044;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.8 |
|---|---|
| Target | 1.4 |
| Herbie | 0.4 |
if (/ (* y (- z t)) (- a t)) < -inf.0 or 4.5497109300300103e+254 < (/ (* y (- z t)) (- a t)) Initial program 59.3
Simplified1.1
if -inf.0 < (/ (* y (- z t)) (- a t)) < 4.5497109300300103e+254Initial program 0.2
Final simplification0.4
herbie shell --seed 2019306 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTicks from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(+ x (/ y (/ (- a t) (- z t))))
(+ x (/ (* y (- z t)) (- a t))))