\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 -1.029332914097035150003651381505816557895 \cdot 10^{146}:\\
\;\;\;\;\left(a \cdot z\right) \cdot b + \left(\left(x + y \cdot z\right) + a \cdot t\right)\\
\mathbf{elif}\;b \le 3.88479588022017558466900273665607578266 \cdot 10^{84}:\\
\;\;\;\;z \cdot \left(a \cdot b\right) + \left(\left(x + y \cdot z\right) + a \cdot t\right)\\
\mathbf{else}:\\
\;\;\;\;\left(a \cdot z\right) \cdot b + \left(\left(x + y \cdot z\right) + a \cdot t\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r33158692 = x;
double r33158693 = y;
double r33158694 = z;
double r33158695 = r33158693 * r33158694;
double r33158696 = r33158692 + r33158695;
double r33158697 = t;
double r33158698 = a;
double r33158699 = r33158697 * r33158698;
double r33158700 = r33158696 + r33158699;
double r33158701 = r33158698 * r33158694;
double r33158702 = b;
double r33158703 = r33158701 * r33158702;
double r33158704 = r33158700 + r33158703;
return r33158704;
}
double f(double x, double y, double z, double t, double a, double b) {
double r33158705 = b;
double r33158706 = -1.0293329140970352e+146;
bool r33158707 = r33158705 <= r33158706;
double r33158708 = a;
double r33158709 = z;
double r33158710 = r33158708 * r33158709;
double r33158711 = r33158710 * r33158705;
double r33158712 = x;
double r33158713 = y;
double r33158714 = r33158713 * r33158709;
double r33158715 = r33158712 + r33158714;
double r33158716 = t;
double r33158717 = r33158708 * r33158716;
double r33158718 = r33158715 + r33158717;
double r33158719 = r33158711 + r33158718;
double r33158720 = 3.8847958802201756e+84;
bool r33158721 = r33158705 <= r33158720;
double r33158722 = r33158708 * r33158705;
double r33158723 = r33158709 * r33158722;
double r33158724 = r33158723 + r33158718;
double r33158725 = r33158721 ? r33158724 : r33158719;
double r33158726 = r33158707 ? r33158719 : r33158725;
return r33158726;
}




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.8 |
if b < -1.0293329140970352e+146 or 3.8847958802201756e+84 < b Initial program 0.9
if -1.0293329140970352e+146 < b < 3.8847958802201756e+84Initial program 2.3
rmApplied add-cube-cbrt2.4
Applied associate-*r*2.4
rmApplied pow12.4
Applied pow12.4
Applied pow12.4
Applied pow-prod-down2.4
Applied pow12.4
Applied pow12.4
Applied pow-prod-down2.4
Applied pow-prod-down2.4
Applied pow-prod-down2.4
Simplified0.7
Final simplification0.8
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)))