x + \frac{y \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;\frac{y \cdot \left(z - t\right)}{a - t} \le -4.42328525588315658 \cdot 10^{240} \lor \neg \left(\frac{y \cdot \left(z - t\right)}{a - t} \le 9.4807877995094137 \cdot 10^{304}\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 r711998 = x;
double r711999 = y;
double r712000 = z;
double r712001 = t;
double r712002 = r712000 - r712001;
double r712003 = r711999 * r712002;
double r712004 = a;
double r712005 = r712004 - r712001;
double r712006 = r712003 / r712005;
double r712007 = r711998 + r712006;
return r712007;
}
double f(double x, double y, double z, double t, double a) {
double r712008 = y;
double r712009 = z;
double r712010 = t;
double r712011 = r712009 - r712010;
double r712012 = r712008 * r712011;
double r712013 = a;
double r712014 = r712013 - r712010;
double r712015 = r712012 / r712014;
double r712016 = -4.4232852558831566e+240;
bool r712017 = r712015 <= r712016;
double r712018 = 9.480787799509414e+304;
bool r712019 = r712015 <= r712018;
double r712020 = !r712019;
bool r712021 = r712017 || r712020;
double r712022 = r712008 / r712014;
double r712023 = x;
double r712024 = fma(r712022, r712011, r712023);
double r712025 = r712023 + r712015;
double r712026 = r712021 ? r712024 : r712025;
return r712026;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.7 |
|---|---|
| Target | 1.3 |
| Herbie | 0.5 |
if (/ (* y (- z t)) (- a t)) < -4.4232852558831566e+240 or 9.480787799509414e+304 < (/ (* y (- z t)) (- a t)) Initial program 58.3
Simplified1.6
if -4.4232852558831566e+240 < (/ (* y (- z t)) (- a t)) < 9.480787799509414e+304Initial program 0.2
Final simplification0.5
herbie shell --seed 2020042 +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))))