\left(\left(x + y \cdot z\right) + t \cdot a\right) + \left(a \cdot z\right) \cdot b
\begin{array}{l}
\mathbf{if}\;a \le -44.4689510467186224 \lor \neg \left(a \le 5.91085096997945351 \cdot 10^{-37}\right):\\
\;\;\;\;\mathsf{fma}\left(z, y, \mathsf{fma}\left(\mathsf{fma}\left(z, b, t\right), a, x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(x + y \cdot z\right) + t \cdot a\right) + \left(\sqrt[3]{\left(a \cdot z\right) \cdot b} \cdot \left(\sqrt[3]{a \cdot z} \cdot \sqrt[3]{b}\right)\right) \cdot \sqrt[3]{\left(a \cdot z\right) \cdot b}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r390933 = x;
double r390934 = y;
double r390935 = z;
double r390936 = r390934 * r390935;
double r390937 = r390933 + r390936;
double r390938 = t;
double r390939 = a;
double r390940 = r390938 * r390939;
double r390941 = r390937 + r390940;
double r390942 = r390939 * r390935;
double r390943 = b;
double r390944 = r390942 * r390943;
double r390945 = r390941 + r390944;
return r390945;
}
double f(double x, double y, double z, double t, double a, double b) {
double r390946 = a;
double r390947 = -44.46895104671862;
bool r390948 = r390946 <= r390947;
double r390949 = 5.9108509699794535e-37;
bool r390950 = r390946 <= r390949;
double r390951 = !r390950;
bool r390952 = r390948 || r390951;
double r390953 = z;
double r390954 = y;
double r390955 = b;
double r390956 = t;
double r390957 = fma(r390953, r390955, r390956);
double r390958 = x;
double r390959 = fma(r390957, r390946, r390958);
double r390960 = fma(r390953, r390954, r390959);
double r390961 = r390954 * r390953;
double r390962 = r390958 + r390961;
double r390963 = r390956 * r390946;
double r390964 = r390962 + r390963;
double r390965 = r390946 * r390953;
double r390966 = r390965 * r390955;
double r390967 = cbrt(r390966);
double r390968 = cbrt(r390965);
double r390969 = cbrt(r390955);
double r390970 = r390968 * r390969;
double r390971 = r390967 * r390970;
double r390972 = r390971 * r390967;
double r390973 = r390964 + r390972;
double r390974 = r390952 ? r390960 : r390973;
return r390974;
}




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.3 |
| Herbie | 0.3 |
if a < -44.46895104671862 or 5.9108509699794535e-37 < a Initial program 4.6
Simplified0.1
if -44.46895104671862 < a < 5.9108509699794535e-37Initial program 0.4
rmApplied add-cube-cbrt0.5
rmApplied cbrt-prod0.5
Final simplification0.3
herbie shell --seed 2019199 +o rules:numerics
(FPCore (x y z t a b)
:name "Graphics.Rasterific.CubicBezier:cachedBezierAt from Rasterific-0.6.1"
:herbie-target
(if (< z -1.1820553527347888e+19) (+ (* 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)))