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:\\
\;\;\;\;\frac{z}{\frac{a - t}{y}} - \left(\frac{t}{\frac{a - t}{y}} - x\right)\\
\mathbf{elif}\;\frac{y \cdot \left(z - t\right)}{a - t} \le 5.105950757333242047287578696854372670873 \cdot 10^{306}:\\
\;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a - t}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a - t}, z - t, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r333922 = x;
double r333923 = y;
double r333924 = z;
double r333925 = t;
double r333926 = r333924 - r333925;
double r333927 = r333923 * r333926;
double r333928 = a;
double r333929 = r333928 - r333925;
double r333930 = r333927 / r333929;
double r333931 = r333922 + r333930;
return r333931;
}
double f(double x, double y, double z, double t, double a) {
double r333932 = y;
double r333933 = z;
double r333934 = t;
double r333935 = r333933 - r333934;
double r333936 = r333932 * r333935;
double r333937 = a;
double r333938 = r333937 - r333934;
double r333939 = r333936 / r333938;
double r333940 = -inf.0;
bool r333941 = r333939 <= r333940;
double r333942 = r333938 / r333932;
double r333943 = r333933 / r333942;
double r333944 = r333934 / r333942;
double r333945 = x;
double r333946 = r333944 - r333945;
double r333947 = r333943 - r333946;
double r333948 = 5.105950757333242e+306;
bool r333949 = r333939 <= r333948;
double r333950 = r333945 + r333939;
double r333951 = r333932 / r333938;
double r333952 = fma(r333951, r333935, r333945);
double r333953 = r333949 ? r333950 : r333952;
double r333954 = r333941 ? r333947 : r333953;
return r333954;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.4 |
|---|---|
| Target | 1.5 |
| Herbie | 0.2 |
if (/ (* y (- z t)) (- a t)) < -inf.0Initial program 64.0
Simplified0.2
rmApplied clear-num0.3
rmApplied fma-udef0.3
Simplified0.2
rmApplied div-sub0.2
Applied associate-+l-0.2
if -inf.0 < (/ (* y (- z t)) (- a t)) < 5.105950757333242e+306Initial program 0.2
if 5.105950757333242e+306 < (/ (* y (- z t)) (- a t)) Initial program 63.6
Simplified0.5
Final simplification0.2
herbie shell --seed 2019325 +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))))