x + y \cdot \frac{z - t}{z - a}\begin{array}{l}
\mathbf{if}\;y \le -4.4286636126829549 \cdot 10^{-64} \lor \neg \left(y \le 0.043009032465073517\right):\\
\;\;\;\;x + 1 \cdot \frac{y}{\frac{z - a}{z - t}}\\
\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 r645785 = x;
double r645786 = y;
double r645787 = z;
double r645788 = t;
double r645789 = r645787 - r645788;
double r645790 = a;
double r645791 = r645787 - r645790;
double r645792 = r645789 / r645791;
double r645793 = r645786 * r645792;
double r645794 = r645785 + r645793;
return r645794;
}
double f(double x, double y, double z, double t, double a) {
double r645795 = y;
double r645796 = -4.428663612682955e-64;
bool r645797 = r645795 <= r645796;
double r645798 = 0.04300903246507352;
bool r645799 = r645795 <= r645798;
double r645800 = !r645799;
bool r645801 = r645797 || r645800;
double r645802 = x;
double r645803 = 1.0;
double r645804 = z;
double r645805 = a;
double r645806 = r645804 - r645805;
double r645807 = t;
double r645808 = r645804 - r645807;
double r645809 = r645806 / r645808;
double r645810 = r645795 / r645809;
double r645811 = r645803 * r645810;
double r645812 = r645802 + r645811;
double r645813 = r645795 * r645808;
double r645814 = r645813 / r645806;
double r645815 = r645802 + r645814;
double r645816 = r645801 ? r645812 : r645815;
return r645816;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 1.2 |
|---|---|
| Target | 1.1 |
| Herbie | 0.4 |
if y < -4.428663612682955e-64 or 0.04300903246507352 < y Initial program 0.5
rmApplied clear-num0.6
rmApplied *-un-lft-identity0.6
Applied associate-*l*0.6
Simplified0.5
if -4.428663612682955e-64 < y < 0.04300903246507352Initial program 2.0
rmApplied associate-*r/0.2
Final simplification0.4
herbie shell --seed 2020065
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, A"
:precision binary64
:herbie-target
(+ x (/ y (/ (- z a) (- z t))))
(+ x (* y (/ (- z t) (- z a)))))