\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\begin{array}{l}
\mathbf{if}\;z \le -3.302391226834307651764656087267345680124 \cdot 10^{-102} \lor \neg \left(z \le 1.977197034739473314773841654677642237914 \cdot 10^{-38}\right):\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{\mathsf{fma}\left(z, t, -x\right)}, z, x\right)}{x + 1} - \frac{\frac{-x}{\mathsf{fma}\left(z, -t, x\right)}}{x + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{1}{\frac{t \cdot z - x}{y \cdot z - x}}}{x + 1}\\
\end{array}double f(double x, double y, double z, double t) {
double r902946 = x;
double r902947 = y;
double r902948 = z;
double r902949 = r902947 * r902948;
double r902950 = r902949 - r902946;
double r902951 = t;
double r902952 = r902951 * r902948;
double r902953 = r902952 - r902946;
double r902954 = r902950 / r902953;
double r902955 = r902946 + r902954;
double r902956 = 1.0;
double r902957 = r902946 + r902956;
double r902958 = r902955 / r902957;
return r902958;
}
double f(double x, double y, double z, double t) {
double r902959 = z;
double r902960 = -3.3023912268343077e-102;
bool r902961 = r902959 <= r902960;
double r902962 = 1.9771970347394733e-38;
bool r902963 = r902959 <= r902962;
double r902964 = !r902963;
bool r902965 = r902961 || r902964;
double r902966 = y;
double r902967 = t;
double r902968 = x;
double r902969 = -r902968;
double r902970 = fma(r902959, r902967, r902969);
double r902971 = r902966 / r902970;
double r902972 = fma(r902971, r902959, r902968);
double r902973 = 1.0;
double r902974 = r902968 + r902973;
double r902975 = r902972 / r902974;
double r902976 = -r902967;
double r902977 = fma(r902959, r902976, r902968);
double r902978 = r902969 / r902977;
double r902979 = r902978 / r902974;
double r902980 = r902975 - r902979;
double r902981 = 1.0;
double r902982 = r902967 * r902959;
double r902983 = r902982 - r902968;
double r902984 = r902966 * r902959;
double r902985 = r902984 - r902968;
double r902986 = r902983 / r902985;
double r902987 = r902981 / r902986;
double r902988 = r902968 + r902987;
double r902989 = r902988 / r902974;
double r902990 = r902965 ? r902980 : r902989;
return r902990;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 7.6 |
|---|---|
| Target | 0.3 |
| Herbie | 3.0 |
if z < -3.3023912268343077e-102 or 1.9771970347394733e-38 < z Initial program 12.7
rmApplied div-sub12.7
Applied associate-+r-12.7
Applied div-sub12.7
Simplified4.9
rmApplied frac-2neg4.9
Simplified4.9
if -3.3023912268343077e-102 < z < 1.9771970347394733e-38Initial program 0.1
rmApplied clear-num0.1
Final simplification3.0
herbie shell --seed 2019350 +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)))