x + \frac{\left(y - z\right) \cdot t}{a - z}\begin{array}{l}
\mathbf{if}\;z \le -1.41607876912572170501264147417537244743 \cdot 10^{-236} \lor \neg \left(z \le 1.1044784079803560131683569738891510282 \cdot 10^{-268}\right):\\
\;\;\;\;\frac{t}{\frac{a - z}{y - z}} + x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{t}{a}, y, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r363237 = x;
double r363238 = y;
double r363239 = z;
double r363240 = r363238 - r363239;
double r363241 = t;
double r363242 = r363240 * r363241;
double r363243 = a;
double r363244 = r363243 - r363239;
double r363245 = r363242 / r363244;
double r363246 = r363237 + r363245;
return r363246;
}
double f(double x, double y, double z, double t, double a) {
double r363247 = z;
double r363248 = -1.4160787691257217e-236;
bool r363249 = r363247 <= r363248;
double r363250 = 1.104478407980356e-268;
bool r363251 = r363247 <= r363250;
double r363252 = !r363251;
bool r363253 = r363249 || r363252;
double r363254 = t;
double r363255 = a;
double r363256 = r363255 - r363247;
double r363257 = y;
double r363258 = r363257 - r363247;
double r363259 = r363256 / r363258;
double r363260 = r363254 / r363259;
double r363261 = x;
double r363262 = r363260 + r363261;
double r363263 = r363254 / r363255;
double r363264 = fma(r363263, r363257, r363261);
double r363265 = r363253 ? r363262 : r363264;
return r363265;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.5 |
|---|---|
| Target | 0.7 |
| Herbie | 1.5 |
if z < -1.4160787691257217e-236 or 1.104478407980356e-268 < z Initial program 11.0
Simplified1.2
rmApplied clear-num1.3
rmApplied add-cube-cbrt1.5
Applied add-cube-cbrt1.5
Applied times-frac1.5
Simplified1.5
Simplified1.5
rmApplied fma-udef1.5
Simplified1.1
if -1.4160787691257217e-236 < z < 1.104478407980356e-268Initial program 5.0
Simplified4.5
rmApplied clear-num4.6
Taylor expanded around inf 7.1
Simplified6.6
Final simplification1.5
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTick from plot-0.2.3.4, A"
:precision binary64
:herbie-target
(if (< t -1.0682974490174067e-39) (+ x (* (/ (- y z) (- a z)) t)) (if (< t 3.9110949887586375e-141) (+ x (/ (* (- y z) t) (- a z))) (+ x (* (/ (- y z) (- a z)) t))))
(+ x (/ (* (- y z) t) (- a z))))