\left(\left(x + y \cdot z\right) + t \cdot a\right) + \left(a \cdot z\right) \cdot b
\mathsf{fma}\left(y, z, \mathsf{fma}\left(t, a, x\right)\right) + \left(\sqrt[3]{\left(a \cdot z\right) \cdot b} \cdot \sqrt[3]{\left(a \cdot z\right) \cdot b}\right) \cdot \sqrt[3]{\sqrt[3]{b} \cdot \left(\left(a \cdot z\right) \cdot \left(\sqrt[3]{b} \cdot \sqrt[3]{b}\right)\right)}double f(double x, double y, double z, double t, double a, double b) {
double r25767195 = x;
double r25767196 = y;
double r25767197 = z;
double r25767198 = r25767196 * r25767197;
double r25767199 = r25767195 + r25767198;
double r25767200 = t;
double r25767201 = a;
double r25767202 = r25767200 * r25767201;
double r25767203 = r25767199 + r25767202;
double r25767204 = r25767201 * r25767197;
double r25767205 = b;
double r25767206 = r25767204 * r25767205;
double r25767207 = r25767203 + r25767206;
return r25767207;
}
double f(double x, double y, double z, double t, double a, double b) {
double r25767208 = y;
double r25767209 = z;
double r25767210 = t;
double r25767211 = a;
double r25767212 = x;
double r25767213 = fma(r25767210, r25767211, r25767212);
double r25767214 = fma(r25767208, r25767209, r25767213);
double r25767215 = r25767211 * r25767209;
double r25767216 = b;
double r25767217 = r25767215 * r25767216;
double r25767218 = cbrt(r25767217);
double r25767219 = r25767218 * r25767218;
double r25767220 = cbrt(r25767216);
double r25767221 = r25767220 * r25767220;
double r25767222 = r25767215 * r25767221;
double r25767223 = r25767220 * r25767222;
double r25767224 = cbrt(r25767223);
double r25767225 = r25767219 * r25767224;
double r25767226 = r25767214 + r25767225;
return r25767226;
}




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 | 1.9 |
|---|---|
| Target | 0.3 |
| Herbie | 2.0 |
Initial program 1.9
Taylor expanded around inf 1.9
Simplified1.9
rmApplied add-cube-cbrt2.0
rmApplied add-cube-cbrt2.0
Applied associate-*r*2.0
Final simplification2.0
herbie shell --seed 2019172 +o rules:numerics
(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)))