\left(\left(x + y \cdot z\right) + t \cdot a\right) + \left(a \cdot z\right) \cdot b
\begin{array}{l}
\mathbf{if}\;z \le -2.5804298148702942 \cdot 10^{51} \lor \neg \left(z \le 8.799567967124541 \cdot 10^{-53}\right):\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(a, b, y\right), z, \mathsf{fma}\left(a, t, x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \mathsf{fma}\left(a, t + z \cdot b, \mathsf{fma}\left(z, y, x\right)\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r579969 = x;
double r579970 = y;
double r579971 = z;
double r579972 = r579970 * r579971;
double r579973 = r579969 + r579972;
double r579974 = t;
double r579975 = a;
double r579976 = r579974 * r579975;
double r579977 = r579973 + r579976;
double r579978 = r579975 * r579971;
double r579979 = b;
double r579980 = r579978 * r579979;
double r579981 = r579977 + r579980;
return r579981;
}
double f(double x, double y, double z, double t, double a, double b) {
double r579982 = z;
double r579983 = -2.5804298148702942e+51;
bool r579984 = r579982 <= r579983;
double r579985 = 8.799567967124541e-53;
bool r579986 = r579982 <= r579985;
double r579987 = !r579986;
bool r579988 = r579984 || r579987;
double r579989 = a;
double r579990 = b;
double r579991 = y;
double r579992 = fma(r579989, r579990, r579991);
double r579993 = t;
double r579994 = x;
double r579995 = fma(r579989, r579993, r579994);
double r579996 = fma(r579992, r579982, r579995);
double r579997 = 1.0;
double r579998 = r579982 * r579990;
double r579999 = r579993 + r579998;
double r580000 = fma(r579982, r579991, r579994);
double r580001 = fma(r579989, r579999, r580000);
double r580002 = r579997 * r580001;
double r580003 = r579988 ? r579996 : r580002;
return r580003;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 2.1 |
|---|---|
| Target | 0.4 |
| Herbie | 0.2 |
if z < -2.5804298148702942e+51 or 8.799567967124541e-53 < z Initial program 4.7
Simplified0.3
if -2.5804298148702942e+51 < z < 8.799567967124541e-53Initial program 0.4
rmApplied associate-+l+0.4
Simplified0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied distribute-lft-out0.4
Simplified0.2
Final simplification0.2
herbie shell --seed 2020100 +o rules:numerics
(FPCore (x y z t a b)
:name "Graphics.Rasterific.CubicBezier:cachedBezierAt from Rasterific-0.6.1"
:precision binary64
:herbie-target
(if (< z -11820553527347888000) (+ (* z (+ (* b a) y)) (+ x (* t a))) (if (< z 4.7589743188364287e-122) (+ (* (+ (* b z) t) a) (+ (* z y) x)) (+ (* z (+ (* b a) y)) (+ x (* t a)))))
(+ (+ (+ x (* y z)) (* t a)) (* (* a z) b)))