\left(\left(x + y \cdot z\right) + t \cdot a\right) + \left(a \cdot z\right) \cdot b
\begin{array}{l}
\mathbf{if}\;b \le -2.286916913862117754718909742314180276625 \cdot 10^{140} \lor \neg \left(b \le 2.423286906516461145384675984050168448583 \cdot 10^{84}\right):\\
\;\;\;\;\left(a \cdot z\right) \cdot b + \left(\left(x + y \cdot z\right) + a \cdot t\right)\\
\mathbf{else}:\\
\;\;\;\;\left(a \cdot t + x\right) + z \cdot \left(y + a \cdot b\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r620457 = x;
double r620458 = y;
double r620459 = z;
double r620460 = r620458 * r620459;
double r620461 = r620457 + r620460;
double r620462 = t;
double r620463 = a;
double r620464 = r620462 * r620463;
double r620465 = r620461 + r620464;
double r620466 = r620463 * r620459;
double r620467 = b;
double r620468 = r620466 * r620467;
double r620469 = r620465 + r620468;
return r620469;
}
double f(double x, double y, double z, double t, double a, double b) {
double r620470 = b;
double r620471 = -2.2869169138621178e+140;
bool r620472 = r620470 <= r620471;
double r620473 = 2.423286906516461e+84;
bool r620474 = r620470 <= r620473;
double r620475 = !r620474;
bool r620476 = r620472 || r620475;
double r620477 = a;
double r620478 = z;
double r620479 = r620477 * r620478;
double r620480 = r620479 * r620470;
double r620481 = x;
double r620482 = y;
double r620483 = r620482 * r620478;
double r620484 = r620481 + r620483;
double r620485 = t;
double r620486 = r620477 * r620485;
double r620487 = r620484 + r620486;
double r620488 = r620480 + r620487;
double r620489 = r620486 + r620481;
double r620490 = r620477 * r620470;
double r620491 = r620482 + r620490;
double r620492 = r620478 * r620491;
double r620493 = r620489 + r620492;
double r620494 = r620476 ? r620488 : r620493;
return r620494;
}




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 | 2.0 |
|---|---|
| Target | 0.3 |
| Herbie | 0.7 |
if b < -2.2869169138621178e+140 or 2.423286906516461e+84 < b Initial program 0.9
if -2.2869169138621178e+140 < b < 2.423286906516461e+84Initial program 2.3
Simplified0.7
Final simplification0.7
herbie shell --seed 2019179
(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)))