x + \frac{y \cdot \left(z - t\right)}{z - a}\begin{array}{l}
\mathbf{if}\;\frac{y \cdot \left(z - t\right)}{z - a} = -\infty \lor \neg \left(\frac{y \cdot \left(z - t\right)}{z - a} \le 6.539770865773377012647932284333126840637 \cdot 10^{177}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{z - a}, z - t, x\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(z - t\right)}{z - a}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r378635 = x;
double r378636 = y;
double r378637 = z;
double r378638 = t;
double r378639 = r378637 - r378638;
double r378640 = r378636 * r378639;
double r378641 = a;
double r378642 = r378637 - r378641;
double r378643 = r378640 / r378642;
double r378644 = r378635 + r378643;
return r378644;
}
double f(double x, double y, double z, double t, double a) {
double r378645 = y;
double r378646 = z;
double r378647 = t;
double r378648 = r378646 - r378647;
double r378649 = r378645 * r378648;
double r378650 = a;
double r378651 = r378646 - r378650;
double r378652 = r378649 / r378651;
double r378653 = -inf.0;
bool r378654 = r378652 <= r378653;
double r378655 = 6.539770865773377e+177;
bool r378656 = r378652 <= r378655;
double r378657 = !r378656;
bool r378658 = r378654 || r378657;
double r378659 = r378645 / r378651;
double r378660 = x;
double r378661 = fma(r378659, r378648, r378660);
double r378662 = r378660 + r378652;
double r378663 = r378658 ? r378661 : r378662;
return r378663;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.5 |
|---|---|
| Target | 1.5 |
| Herbie | 0.7 |
if (/ (* y (- z t)) (- z a)) < -inf.0 or 6.539770865773377e+177 < (/ (* y (- z t)) (- z a)) Initial program 51.1
Simplified2.6
if -inf.0 < (/ (* y (- z t)) (- z a)) < 6.539770865773377e+177Initial program 0.3
Final simplification0.7
herbie shell --seed 2019323 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTicks from plot-0.2.3.4, A"
:precision binary64
:herbie-target
(+ x (/ y (/ (- z a) (- z t))))
(+ x (/ (* y (- z t)) (- z a))))