x + \frac{y \cdot \left(z - t\right)}{z - a}\begin{array}{l}
\mathbf{if}\;y \le -1.109016302886835245235186766998728474519 \cdot 10^{-147}:\\
\;\;\;\;\mathsf{fma}\left(\frac{z - t}{z - a}, y, x\right)\\
\mathbf{elif}\;y \le 5.380855567614572390769079808720250862406 \cdot 10^{-168}:\\
\;\;\;\;\frac{\left(z - t\right) \cdot y}{z - a} + x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{z - t}{z - a}, y, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r24468024 = x;
double r24468025 = y;
double r24468026 = z;
double r24468027 = t;
double r24468028 = r24468026 - r24468027;
double r24468029 = r24468025 * r24468028;
double r24468030 = a;
double r24468031 = r24468026 - r24468030;
double r24468032 = r24468029 / r24468031;
double r24468033 = r24468024 + r24468032;
return r24468033;
}
double f(double x, double y, double z, double t, double a) {
double r24468034 = y;
double r24468035 = -1.1090163028868352e-147;
bool r24468036 = r24468034 <= r24468035;
double r24468037 = z;
double r24468038 = t;
double r24468039 = r24468037 - r24468038;
double r24468040 = a;
double r24468041 = r24468037 - r24468040;
double r24468042 = r24468039 / r24468041;
double r24468043 = x;
double r24468044 = fma(r24468042, r24468034, r24468043);
double r24468045 = 5.380855567614572e-168;
bool r24468046 = r24468034 <= r24468045;
double r24468047 = r24468039 * r24468034;
double r24468048 = r24468047 / r24468041;
double r24468049 = r24468048 + r24468043;
double r24468050 = r24468046 ? r24468049 : r24468044;
double r24468051 = r24468036 ? r24468044 : r24468050;
return r24468051;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.9 |
|---|---|
| Target | 1.1 |
| Herbie | 0.7 |
if y < -1.1090163028868352e-147 or 5.380855567614572e-168 < y Initial program 14.7
Simplified0.8
if -1.1090163028868352e-147 < y < 5.380855567614572e-168Initial program 0.5
Final simplification0.7
herbie shell --seed 2019192 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTicks from plot-0.2.3.4, A"
:herbie-target
(+ x (/ y (/ (- z a) (- z t))))
(+ x (/ (* y (- z t)) (- z a))))