x1 + \left(\left(\left(\left(\left(\left(\left(2 \cdot x1\right) \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1}\right) \cdot \left(\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1} - 3\right) + \left(x1 \cdot x1\right) \cdot \left(4 \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1} - 6\right)\right) \cdot \left(x1 \cdot x1 + 1\right) + \left(\left(3 \cdot x1\right) \cdot x1\right) \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1}\right) + \left(x1 \cdot x1\right) \cdot x1\right) + x1\right) + 3 \cdot \frac{\left(\left(3 \cdot x1\right) \cdot x1 - 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1}\right)\mathsf{fma}\left(\left(\frac{\left(\left(3 \cdot x1\right) \cdot x1 - x1\right) - x2 \cdot 2}{\mathsf{fma}\left(x1, x1, 1\right)}\right), 3, \left(x1 + \mathsf{fma}\left(\left(\mathsf{fma}\left(x1, x1, 1\right)\right), x1, \left(\mathsf{fma}\left(\left(\frac{\mathsf{fma}\left(3, \left(x1 \cdot x1\right), \left(x2 \cdot 2 - x1\right)\right)}{\mathsf{fma}\left(x1, x1, 1\right)}\right), \left(\left(3 \cdot x1\right) \cdot x1\right), \left(\mathsf{fma}\left(\left(\mathsf{fma}\left(\left(\frac{\mathsf{fma}\left(3, \left(x1 \cdot x1\right), \left(x2 \cdot 2 - x1\right)\right)}{\mathsf{fma}\left(x1, x1, 1\right)}\right), 4, -6\right)\right), \left(x1 \cdot x1\right), \left(\frac{\left(\left(2 \cdot x1\right) \cdot \mathsf{fma}\left(3, \left(x1 \cdot x1\right), \left(x2 \cdot 2 - x1\right)\right)\right) \cdot \left(\frac{\mathsf{fma}\left(3, \left(x1 \cdot x1\right), \left(x2 \cdot 2 - x1\right)\right)}{\mathsf{fma}\left(x1, x1, 1\right)} - 3\right)}{\mathsf{fma}\left(x1, x1, 1\right)}\right)\right) \cdot \mathsf{fma}\left(x1, x1, 1\right)\right)\right)\right)\right)\right)\right)double f(double x1, double x2) {
double r1318202 = x1;
double r1318203 = 2.0;
double r1318204 = r1318203 * r1318202;
double r1318205 = 3.0;
double r1318206 = r1318205 * r1318202;
double r1318207 = r1318206 * r1318202;
double r1318208 = x2;
double r1318209 = r1318203 * r1318208;
double r1318210 = r1318207 + r1318209;
double r1318211 = r1318210 - r1318202;
double r1318212 = r1318202 * r1318202;
double r1318213 = 1.0;
double r1318214 = r1318212 + r1318213;
double r1318215 = r1318211 / r1318214;
double r1318216 = r1318204 * r1318215;
double r1318217 = r1318215 - r1318205;
double r1318218 = r1318216 * r1318217;
double r1318219 = 4.0;
double r1318220 = r1318219 * r1318215;
double r1318221 = 6.0;
double r1318222 = r1318220 - r1318221;
double r1318223 = r1318212 * r1318222;
double r1318224 = r1318218 + r1318223;
double r1318225 = r1318224 * r1318214;
double r1318226 = r1318207 * r1318215;
double r1318227 = r1318225 + r1318226;
double r1318228 = r1318212 * r1318202;
double r1318229 = r1318227 + r1318228;
double r1318230 = r1318229 + r1318202;
double r1318231 = r1318207 - r1318209;
double r1318232 = r1318231 - r1318202;
double r1318233 = r1318232 / r1318214;
double r1318234 = r1318205 * r1318233;
double r1318235 = r1318230 + r1318234;
double r1318236 = r1318202 + r1318235;
return r1318236;
}
double f(double x1, double x2) {
double r1318237 = 3.0;
double r1318238 = x1;
double r1318239 = r1318237 * r1318238;
double r1318240 = r1318239 * r1318238;
double r1318241 = r1318240 - r1318238;
double r1318242 = x2;
double r1318243 = 2.0;
double r1318244 = r1318242 * r1318243;
double r1318245 = r1318241 - r1318244;
double r1318246 = 1.0;
double r1318247 = fma(r1318238, r1318238, r1318246);
double r1318248 = r1318245 / r1318247;
double r1318249 = r1318238 * r1318238;
double r1318250 = r1318244 - r1318238;
double r1318251 = fma(r1318237, r1318249, r1318250);
double r1318252 = r1318251 / r1318247;
double r1318253 = 4.0;
double r1318254 = -6.0;
double r1318255 = fma(r1318252, r1318253, r1318254);
double r1318256 = r1318243 * r1318238;
double r1318257 = r1318256 * r1318251;
double r1318258 = r1318252 - r1318237;
double r1318259 = r1318257 * r1318258;
double r1318260 = r1318259 / r1318247;
double r1318261 = fma(r1318255, r1318249, r1318260);
double r1318262 = r1318261 * r1318247;
double r1318263 = fma(r1318252, r1318240, r1318262);
double r1318264 = fma(r1318247, r1318238, r1318263);
double r1318265 = r1318238 + r1318264;
double r1318266 = fma(r1318248, r1318237, r1318265);
return r1318266;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied associate-*r/0.3
Applied associate-*r/0.3
Final simplification0.3
herbie shell --seed 2019133 +o rules:numerics
(FPCore (x1 x2)
:name "Rosa's FloatVsDoubleBenchmark"
(+ x1 (+ (+ (+ (+ (* (+ (* (* (* 2 x1) (/ (- (+ (* (* 3 x1) x1) (* 2 x2)) x1) (+ (* x1 x1) 1))) (- (/ (- (+ (* (* 3 x1) x1) (* 2 x2)) x1) (+ (* x1 x1) 1)) 3)) (* (* x1 x1) (- (* 4 (/ (- (+ (* (* 3 x1) x1) (* 2 x2)) x1) (+ (* x1 x1) 1))) 6))) (+ (* x1 x1) 1)) (* (* (* 3 x1) x1) (/ (- (+ (* (* 3 x1) x1) (* 2 x2)) x1) (+ (* x1 x1) 1)))) (* (* x1 x1) x1)) x1) (* 3 (/ (- (- (* (* 3 x1) x1) (* 2 x2)) x1) (+ (* x1 x1) 1))))))