\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.3683211863065988 \cdot 10^{160} \lor \neg \left(z \le 3.7182254012398825 \cdot 10^{-136}\right):\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(a, b, y\right), z, \mathsf{fma}\left(a, t, x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(x + y \cdot z\right) + t \cdot a\right) + \left(a \cdot z\right) \cdot b\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r753543 = x;
double r753544 = y;
double r753545 = z;
double r753546 = r753544 * r753545;
double r753547 = r753543 + r753546;
double r753548 = t;
double r753549 = a;
double r753550 = r753548 * r753549;
double r753551 = r753547 + r753550;
double r753552 = r753549 * r753545;
double r753553 = b;
double r753554 = r753552 * r753553;
double r753555 = r753551 + r753554;
return r753555;
}
double f(double x, double y, double z, double t, double a, double b) {
double r753556 = z;
double r753557 = -2.3683211863065988e+160;
bool r753558 = r753556 <= r753557;
double r753559 = 3.7182254012398825e-136;
bool r753560 = r753556 <= r753559;
double r753561 = !r753560;
bool r753562 = r753558 || r753561;
double r753563 = a;
double r753564 = b;
double r753565 = y;
double r753566 = fma(r753563, r753564, r753565);
double r753567 = t;
double r753568 = x;
double r753569 = fma(r753563, r753567, r753568);
double r753570 = fma(r753566, r753556, r753569);
double r753571 = r753565 * r753556;
double r753572 = r753568 + r753571;
double r753573 = r753567 * r753563;
double r753574 = r753572 + r753573;
double r753575 = r753563 * r753556;
double r753576 = r753575 * r753564;
double r753577 = r753574 + r753576;
double r753578 = r753562 ? r753570 : r753577;
return r753578;
}




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.0 |
|---|---|
| Target | 0.4 |
| Herbie | 0.9 |
if z < -2.3683211863065988e+160 or 3.7182254012398825e-136 < z Initial program 4.1
Simplified1.1
if -2.3683211863065988e+160 < z < 3.7182254012398825e-136Initial program 0.8
Final simplification0.9
herbie shell --seed 2020057 +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)))