\left(\left(x + y \cdot z\right) + t \cdot a\right) + \left(a \cdot z\right) \cdot b
\begin{array}{l}
\mathbf{if}\;y \le -6.633568333968982 \cdot 10^{-165}:\\
\;\;\;\;\left(z \cdot a\right) \cdot b + \left(\left(x + z \cdot y\right) + t \cdot a\right)\\
\mathbf{else}:\\
\;\;\;\;z \cdot \left(b \cdot a\right) + \left(\left(x + z \cdot y\right) + t \cdot a\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r33499240 = x;
double r33499241 = y;
double r33499242 = z;
double r33499243 = r33499241 * r33499242;
double r33499244 = r33499240 + r33499243;
double r33499245 = t;
double r33499246 = a;
double r33499247 = r33499245 * r33499246;
double r33499248 = r33499244 + r33499247;
double r33499249 = r33499246 * r33499242;
double r33499250 = b;
double r33499251 = r33499249 * r33499250;
double r33499252 = r33499248 + r33499251;
return r33499252;
}
double f(double x, double y, double z, double t, double a, double b) {
double r33499253 = y;
double r33499254 = -6.633568333968982e-165;
bool r33499255 = r33499253 <= r33499254;
double r33499256 = z;
double r33499257 = a;
double r33499258 = r33499256 * r33499257;
double r33499259 = b;
double r33499260 = r33499258 * r33499259;
double r33499261 = x;
double r33499262 = r33499256 * r33499253;
double r33499263 = r33499261 + r33499262;
double r33499264 = t;
double r33499265 = r33499264 * r33499257;
double r33499266 = r33499263 + r33499265;
double r33499267 = r33499260 + r33499266;
double r33499268 = r33499259 * r33499257;
double r33499269 = r33499256 * r33499268;
double r33499270 = r33499269 + r33499266;
double r33499271 = r33499255 ? r33499267 : r33499270;
return r33499271;
}




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 | 2.1 |
if y < -6.633568333968982e-165Initial program 1.7
if -6.633568333968982e-165 < y Initial program 2.0
rmApplied add-cube-cbrt2.2
Applied associate-*r*2.2
rmApplied associate-*l*2.1
rmApplied pow12.1
Applied pow12.1
Applied pow12.1
Applied pow-prod-down2.1
Applied pow12.1
Applied pow-prod-down2.1
Applied pow12.1
Applied pow-prod-down2.1
Applied pow-prod-down2.1
Simplified2.3
Final simplification2.1
herbie shell --seed 2019163
(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)))