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(3, \left(\frac{x1 \cdot \left(x1 \cdot 3\right) - \mathsf{fma}\left(2, x2, x1\right)}{\mathsf{fma}\left(x1, x1, 1\right)}\right), \left(\mathsf{fma}\left(x1, \left(x1 \cdot x1\right), \left(\mathsf{fma}\left(\left(\frac{\mathsf{fma}\left(x2, 2, \left(x1 \cdot \left(x1 \cdot 3\right)\right)\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)}\right), \left(x1 \cdot \left(x1 \cdot 3\right)\right), \left(\mathsf{fma}\left(\left(\mathsf{fma}\left(\left(\frac{\mathsf{fma}\left(x2, 2, \left(x1 \cdot \left(x1 \cdot 3\right)\right)\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)}\right), 4, -6\right)\right), \left(x1 \cdot x1\right), \left(\left(\left(\frac{\mathsf{fma}\left(x2, 2, \left(x1 \cdot \left(x1 \cdot 3\right)\right)\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)} - 3\right) \cdot \left(2 \cdot x1\right)\right) \cdot \frac{\mathsf{fma}\left(x2, 2, \left(x1 \cdot \left(x1 \cdot 3\right)\right)\right) - x1}{\mathsf{fma}\left(x1, x1, 1\right)}\right)\right) \cdot \mathsf{fma}\left(x1, x1, 1\right)\right)\right)\right)\right) + x1\right)\right) + x1double f(double x1, double x2) {
double r14125205 = x1;
double r14125206 = 2.0;
double r14125207 = r14125206 * r14125205;
double r14125208 = 3.0;
double r14125209 = r14125208 * r14125205;
double r14125210 = r14125209 * r14125205;
double r14125211 = x2;
double r14125212 = r14125206 * r14125211;
double r14125213 = r14125210 + r14125212;
double r14125214 = r14125213 - r14125205;
double r14125215 = r14125205 * r14125205;
double r14125216 = 1.0;
double r14125217 = r14125215 + r14125216;
double r14125218 = r14125214 / r14125217;
double r14125219 = r14125207 * r14125218;
double r14125220 = r14125218 - r14125208;
double r14125221 = r14125219 * r14125220;
double r14125222 = 4.0;
double r14125223 = r14125222 * r14125218;
double r14125224 = 6.0;
double r14125225 = r14125223 - r14125224;
double r14125226 = r14125215 * r14125225;
double r14125227 = r14125221 + r14125226;
double r14125228 = r14125227 * r14125217;
double r14125229 = r14125210 * r14125218;
double r14125230 = r14125228 + r14125229;
double r14125231 = r14125215 * r14125205;
double r14125232 = r14125230 + r14125231;
double r14125233 = r14125232 + r14125205;
double r14125234 = r14125210 - r14125212;
double r14125235 = r14125234 - r14125205;
double r14125236 = r14125235 / r14125217;
double r14125237 = r14125208 * r14125236;
double r14125238 = r14125233 + r14125237;
double r14125239 = r14125205 + r14125238;
return r14125239;
}
double f(double x1, double x2) {
double r14125240 = 3.0;
double r14125241 = x1;
double r14125242 = r14125241 * r14125240;
double r14125243 = r14125241 * r14125242;
double r14125244 = 2.0;
double r14125245 = x2;
double r14125246 = fma(r14125244, r14125245, r14125241);
double r14125247 = r14125243 - r14125246;
double r14125248 = 1.0;
double r14125249 = fma(r14125241, r14125241, r14125248);
double r14125250 = r14125247 / r14125249;
double r14125251 = r14125241 * r14125241;
double r14125252 = fma(r14125245, r14125244, r14125243);
double r14125253 = r14125252 - r14125241;
double r14125254 = r14125253 / r14125249;
double r14125255 = 4.0;
double r14125256 = -6.0;
double r14125257 = fma(r14125254, r14125255, r14125256);
double r14125258 = r14125254 - r14125240;
double r14125259 = r14125244 * r14125241;
double r14125260 = r14125258 * r14125259;
double r14125261 = r14125260 * r14125254;
double r14125262 = fma(r14125257, r14125251, r14125261);
double r14125263 = r14125262 * r14125249;
double r14125264 = fma(r14125254, r14125243, r14125263);
double r14125265 = fma(r14125241, r14125251, r14125264);
double r14125266 = r14125265 + r14125241;
double r14125267 = fma(r14125240, r14125250, r14125266);
double r14125268 = r14125267 + r14125241;
return r14125268;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied associate-*r*0.3
Final simplification0.3
herbie shell --seed 2019120 +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))))))