\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 -3.582737355568931258605138652643678872962 \cdot 10^{-21} \lor \neg \left(z \le 5.508327630323644327130679267730007262378 \cdot 10^{107}\right):\\
\;\;\;\;\left(\left(x + y \cdot z\right) + t \cdot a\right) + z \cdot \left(a \cdot b\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(z, y, \mathsf{fma}\left(\mathsf{fma}\left(z, b, t\right), a, x\right)\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r418654 = x;
double r418655 = y;
double r418656 = z;
double r418657 = r418655 * r418656;
double r418658 = r418654 + r418657;
double r418659 = t;
double r418660 = a;
double r418661 = r418659 * r418660;
double r418662 = r418658 + r418661;
double r418663 = r418660 * r418656;
double r418664 = b;
double r418665 = r418663 * r418664;
double r418666 = r418662 + r418665;
return r418666;
}
double f(double x, double y, double z, double t, double a, double b) {
double r418667 = z;
double r418668 = -3.582737355568931e-21;
bool r418669 = r418667 <= r418668;
double r418670 = 5.5083276303236443e+107;
bool r418671 = r418667 <= r418670;
double r418672 = !r418671;
bool r418673 = r418669 || r418672;
double r418674 = x;
double r418675 = y;
double r418676 = r418675 * r418667;
double r418677 = r418674 + r418676;
double r418678 = t;
double r418679 = a;
double r418680 = r418678 * r418679;
double r418681 = r418677 + r418680;
double r418682 = b;
double r418683 = r418679 * r418682;
double r418684 = r418667 * r418683;
double r418685 = r418681 + r418684;
double r418686 = fma(r418667, r418682, r418678);
double r418687 = fma(r418686, r418679, r418674);
double r418688 = fma(r418667, r418675, r418687);
double r418689 = r418673 ? r418685 : r418688;
return r418689;
}




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.2 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
if z < -3.582737355568931e-21 or 5.5083276303236443e+107 < z Initial program 5.6
rmApplied add-cube-cbrt5.9
Applied associate-*r*5.9
Simplified5.9
rmApplied pow15.9
Applied pow15.9
Applied pow15.9
Applied pow-prod-down5.9
Applied pow15.9
Applied pow15.9
Applied pow-prod-down5.9
Applied pow-prod-down5.9
Applied pow-prod-down5.9
Simplified0.1
if -3.582737355568931e-21 < z < 5.5083276303236443e+107Initial program 0.7
Simplified0.5
Final simplification0.4
herbie shell --seed 2019305 +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.75897431883642871e-122) (+ (* (+ (* b z) t) a) (+ (* z y) x)) (+ (* z (+ (* b a) y)) (+ x (* t a)))))
(+ (+ (+ x (* y z)) (* t a)) (* (* a z) b)))