\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1} = -\infty:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{1}{\frac{t \cdot z - x}{y}}, z, x\right) - \frac{1}{\frac{t \cdot z - x}{x}}}{x + 1}\\
\mathbf{elif}\;\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1} \le 1.48483285561730493 \cdot 10^{301}:\\
\;\;\;\;\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r617837 = x;
double r617838 = y;
double r617839 = z;
double r617840 = r617838 * r617839;
double r617841 = r617840 - r617837;
double r617842 = t;
double r617843 = r617842 * r617839;
double r617844 = r617843 - r617837;
double r617845 = r617841 / r617844;
double r617846 = r617837 + r617845;
double r617847 = 1.0;
double r617848 = r617837 + r617847;
double r617849 = r617846 / r617848;
return r617849;
}
double f(double x, double y, double z, double t) {
double r617850 = x;
double r617851 = y;
double r617852 = z;
double r617853 = r617851 * r617852;
double r617854 = r617853 - r617850;
double r617855 = t;
double r617856 = r617855 * r617852;
double r617857 = r617856 - r617850;
double r617858 = r617854 / r617857;
double r617859 = r617850 + r617858;
double r617860 = 1.0;
double r617861 = r617850 + r617860;
double r617862 = r617859 / r617861;
double r617863 = -inf.0;
bool r617864 = r617862 <= r617863;
double r617865 = 1.0;
double r617866 = r617857 / r617851;
double r617867 = r617865 / r617866;
double r617868 = fma(r617867, r617852, r617850);
double r617869 = r617857 / r617850;
double r617870 = r617865 / r617869;
double r617871 = r617868 - r617870;
double r617872 = r617871 / r617861;
double r617873 = 1.484832855617305e+301;
bool r617874 = r617862 <= r617873;
double r617875 = r617851 / r617855;
double r617876 = r617850 + r617875;
double r617877 = r617876 / r617861;
double r617878 = r617874 ? r617862 : r617877;
double r617879 = r617864 ? r617872 : r617878;
return r617879;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.5 |
|---|---|
| Target | 0.4 |
| Herbie | 1.6 |
if (/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)) < -inf.0Initial program 64.0
rmApplied div-sub64.0
Applied associate-+r-64.0
Simplified3.5
rmApplied clear-num3.5
rmApplied clear-num3.5
if -inf.0 < (/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)) < 1.484832855617305e+301Initial program 0.7
if 1.484832855617305e+301 < (/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1.0)) Initial program 63.3
Taylor expanded around inf 12.0
Final simplification1.6
herbie shell --seed 2020033 +o rules:numerics
(FPCore (x y z t)
:name "Diagrams.Trail:splitAtParam from diagrams-lib-1.3.0.3, A"
:precision binary64
:herbie-target
(/ (+ x (- (/ y (- t (/ x z))) (/ x (- (* t z) x)))) (+ x 1))
(/ (+ x (/ (- (* y z) x) (- (* t z) x))) (+ x 1)))