\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 -1.6607943700588965 \cdot 10^{-190}:\\
\;\;\;\;\left(\left(x + y \cdot z\right) + t \cdot a\right) + a \cdot \left(z \cdot b\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 r669337 = x;
double r669338 = y;
double r669339 = z;
double r669340 = r669338 * r669339;
double r669341 = r669337 + r669340;
double r669342 = t;
double r669343 = a;
double r669344 = r669342 * r669343;
double r669345 = r669341 + r669344;
double r669346 = r669343 * r669339;
double r669347 = b;
double r669348 = r669346 * r669347;
double r669349 = r669345 + r669348;
return r669349;
}
double f(double x, double y, double z, double t, double a, double b) {
double r669350 = a;
double r669351 = -1.6607943700588965e-190;
bool r669352 = r669350 <= r669351;
double r669353 = x;
double r669354 = y;
double r669355 = z;
double r669356 = r669354 * r669355;
double r669357 = r669353 + r669356;
double r669358 = t;
double r669359 = r669358 * r669350;
double r669360 = r669357 + r669359;
double r669361 = b;
double r669362 = r669355 * r669361;
double r669363 = r669350 * r669362;
double r669364 = r669360 + r669363;
double r669365 = r669350 * r669355;
double r669366 = r669365 * r669361;
double r669367 = r669360 + r669366;
double r669368 = r669352 ? r669364 : r669367;
return r669368;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 1.9 |
|---|---|
| Target | 0.4 |
| Herbie | 1.6 |
if a < -1.6607943700588965e-190Initial program 2.3
rmApplied associate-*l*1.7
if -1.6607943700588965e-190 < a Initial program 1.6
Final simplification1.6
herbie shell --seed 2020060
(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)))