\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 -10262889671540512835005222748160:\\
\;\;\;\;\left(\left(x + y \cdot z\right) + t \cdot a\right) + \left(a \cdot b\right) \cdot z\\
\mathbf{else}:\\
\;\;\;\;\left(\left(x + y \cdot z\right) + t \cdot a\right) + \left(a \cdot z\right) \cdot b\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r504095 = x;
double r504096 = y;
double r504097 = z;
double r504098 = r504096 * r504097;
double r504099 = r504095 + r504098;
double r504100 = t;
double r504101 = a;
double r504102 = r504100 * r504101;
double r504103 = r504099 + r504102;
double r504104 = r504101 * r504097;
double r504105 = b;
double r504106 = r504104 * r504105;
double r504107 = r504103 + r504106;
return r504107;
}
double f(double x, double y, double z, double t, double a, double b) {
double r504108 = z;
double r504109 = -1.0262889671540513e+31;
bool r504110 = r504108 <= r504109;
double r504111 = x;
double r504112 = y;
double r504113 = r504112 * r504108;
double r504114 = r504111 + r504113;
double r504115 = t;
double r504116 = a;
double r504117 = r504115 * r504116;
double r504118 = r504114 + r504117;
double r504119 = b;
double r504120 = r504116 * r504119;
double r504121 = r504120 * r504108;
double r504122 = r504118 + r504121;
double r504123 = r504116 * r504108;
double r504124 = r504123 * r504119;
double r504125 = r504118 + r504124;
double r504126 = r504110 ? r504122 : r504125;
return r504126;
}




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.3 |
|---|---|
| Target | 0.4 |
| Herbie | 1.3 |
if z < -1.0262889671540513e+31Initial program 6.4
rmApplied add-cube-cbrt6.6
Applied associate-*r*6.6
Simplified6.6
Taylor expanded around inf 7.9
Simplified0.1
if -1.0262889671540513e+31 < z Initial program 1.5
Final simplification1.3
herbie shell --seed 2019212 +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)))