x + \frac{y \cdot \left(z - t\right)}{z - a}\begin{array}{l}
\mathbf{if}\;\frac{y \cdot \left(z - t\right)}{z - a} \le -5.2646213116575603 \cdot 10^{290}:\\
\;\;\;\;y \cdot \left(\left(z - t\right) \cdot \frac{1}{z - a}\right) + x\\
\mathbf{elif}\;\frac{y \cdot \left(z - t\right)}{z - a} \le 1.1606107956763068 \cdot 10^{295}:\\
\;\;\;\;\frac{y \cdot \left(z - t\right)}{z - a} + x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{\frac{z - a}{y}}, z - t, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r729975 = x;
double r729976 = y;
double r729977 = z;
double r729978 = t;
double r729979 = r729977 - r729978;
double r729980 = r729976 * r729979;
double r729981 = a;
double r729982 = r729977 - r729981;
double r729983 = r729980 / r729982;
double r729984 = r729975 + r729983;
return r729984;
}
double f(double x, double y, double z, double t, double a) {
double r729985 = y;
double r729986 = z;
double r729987 = t;
double r729988 = r729986 - r729987;
double r729989 = r729985 * r729988;
double r729990 = a;
double r729991 = r729986 - r729990;
double r729992 = r729989 / r729991;
double r729993 = -5.26462131165756e+290;
bool r729994 = r729992 <= r729993;
double r729995 = 1.0;
double r729996 = r729995 / r729991;
double r729997 = r729988 * r729996;
double r729998 = r729985 * r729997;
double r729999 = x;
double r730000 = r729998 + r729999;
double r730001 = 1.1606107956763068e+295;
bool r730002 = r729992 <= r730001;
double r730003 = r729992 + r729999;
double r730004 = r729991 / r729985;
double r730005 = r729995 / r730004;
double r730006 = fma(r730005, r729988, r729999);
double r730007 = r730002 ? r730003 : r730006;
double r730008 = r729994 ? r730000 : r730007;
return r730008;
}




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.3 |
| Herbie | 0.3 |
if (/ (* y (- z t)) (- z a)) < -5.26462131165756e+290Initial program 61.2
Simplified1.0
rmApplied fma-udef1.0
rmApplied div-inv1.2
Applied associate-*l*0.7
Simplified0.6
rmApplied div-inv0.7
if -5.26462131165756e+290 < (/ (* y (- z t)) (- z a)) < 1.1606107956763068e+295Initial program 0.2
Simplified3.3
rmApplied fma-udef3.3
rmApplied associate-*l/0.2
if 1.1606107956763068e+295 < (/ (* y (- z t)) (- z a)) Initial program 62.1
Simplified0.6
rmApplied clear-num0.7
Final simplification0.3
herbie shell --seed 2020045 +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))))