x + \frac{\left(y - z\right) \cdot t}{a - z}\begin{array}{l}
\mathbf{if}\;t \le -8.6817706718888892 \cdot 10^{-50} \lor \neg \left(t \le 3.2416800356080724 \cdot 10^{-85}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{\frac{a - z}{y - z}}, t, x\right)\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \frac{\left(y - z\right) \cdot t}{a - z} + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r579775 = x;
double r579776 = y;
double r579777 = z;
double r579778 = r579776 - r579777;
double r579779 = t;
double r579780 = r579778 * r579779;
double r579781 = a;
double r579782 = r579781 - r579777;
double r579783 = r579780 / r579782;
double r579784 = r579775 + r579783;
return r579784;
}
double f(double x, double y, double z, double t, double a) {
double r579785 = t;
double r579786 = -8.68177067188889e-50;
bool r579787 = r579785 <= r579786;
double r579788 = 3.2416800356080724e-85;
bool r579789 = r579785 <= r579788;
double r579790 = !r579789;
bool r579791 = r579787 || r579790;
double r579792 = 1.0;
double r579793 = a;
double r579794 = z;
double r579795 = r579793 - r579794;
double r579796 = y;
double r579797 = r579796 - r579794;
double r579798 = r579795 / r579797;
double r579799 = r579792 / r579798;
double r579800 = x;
double r579801 = fma(r579799, r579785, r579800);
double r579802 = r579797 * r579785;
double r579803 = r579802 / r579795;
double r579804 = r579792 * r579803;
double r579805 = r579804 + r579800;
double r579806 = r579791 ? r579801 : r579805;
return r579806;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.6 |
|---|---|
| Target | 0.6 |
| Herbie | 0.6 |
if t < -8.68177067188889e-50 or 3.2416800356080724e-85 < t Initial program 18.0
Simplified0.5
rmApplied clear-num0.6
if -8.68177067188889e-50 < t < 3.2416800356080724e-85Initial program 0.5
Simplified2.7
rmApplied clear-num2.7
rmApplied fma-udef2.7
Simplified4.1
rmApplied *-un-lft-identity4.1
Applied associate-*l*4.1
Simplified0.5
Final simplification0.6
herbie shell --seed 2020064 +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))))