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(\frac{3}{\mathsf{fma}\left(x1, x1, 1\right)}, \mathsf{fma}\left(3, x1 \cdot x1, -\mathsf{fma}\left(x2, 2, x1\right)\right), \left(x1 + \frac{\mathsf{fma}\left(3, x1 \cdot x1, 2 \cdot x2 - x1\right) \cdot \left(\left(3 \cdot x1\right) \cdot x1\right)}{\mathsf{fma}\left(x1, x1, 1\right)}\right) + \mathsf{fma}\left(\mathsf{fma}\left(\left(\frac{\left(\left(3 \cdot x1\right) \cdot x1 + 2 \cdot x2\right) - x1}{x1 \cdot x1 + 1} - 3\right) \cdot 2, \frac{x1 \cdot \mathsf{fma}\left(3, x1 \cdot x1, 2 \cdot x2 - x1\right)}{\mathsf{fma}\left(x1, x1, 1\right)}, \frac{\mathsf{fma}\left(8 \cdot {x1}^{2}, x2, 12 \cdot {x1}^{4} - 4 \cdot {x1}^{3}\right)}{\mathsf{fma}\left(x1, x1, 1\right)} + \left(x1 \cdot x1\right) \cdot \left(-6\right)\right), \mathsf{fma}\left(x1, x1, 1\right), \mathsf{fma}\left(x1, x1 \cdot x1, x1\right)\right)\right)double f(double x1, double x2) {
double r40211 = x1;
double r40212 = 2.0;
double r40213 = r40212 * r40211;
double r40214 = 3.0;
double r40215 = r40214 * r40211;
double r40216 = r40215 * r40211;
double r40217 = x2;
double r40218 = r40212 * r40217;
double r40219 = r40216 + r40218;
double r40220 = r40219 - r40211;
double r40221 = r40211 * r40211;
double r40222 = 1.0;
double r40223 = r40221 + r40222;
double r40224 = r40220 / r40223;
double r40225 = r40213 * r40224;
double r40226 = r40224 - r40214;
double r40227 = r40225 * r40226;
double r40228 = 4.0;
double r40229 = r40228 * r40224;
double r40230 = 6.0;
double r40231 = r40229 - r40230;
double r40232 = r40221 * r40231;
double r40233 = r40227 + r40232;
double r40234 = r40233 * r40223;
double r40235 = r40216 * r40224;
double r40236 = r40234 + r40235;
double r40237 = r40221 * r40211;
double r40238 = r40236 + r40237;
double r40239 = r40238 + r40211;
double r40240 = r40216 - r40218;
double r40241 = r40240 - r40211;
double r40242 = r40241 / r40223;
double r40243 = r40214 * r40242;
double r40244 = r40239 + r40243;
double r40245 = r40211 + r40244;
return r40245;
}
double f(double x1, double x2) {
double r40246 = 3.0;
double r40247 = x1;
double r40248 = 1.0;
double r40249 = fma(r40247, r40247, r40248);
double r40250 = r40246 / r40249;
double r40251 = r40247 * r40247;
double r40252 = x2;
double r40253 = 2.0;
double r40254 = fma(r40252, r40253, r40247);
double r40255 = -r40254;
double r40256 = fma(r40246, r40251, r40255);
double r40257 = r40253 * r40252;
double r40258 = r40257 - r40247;
double r40259 = fma(r40246, r40251, r40258);
double r40260 = r40246 * r40247;
double r40261 = r40260 * r40247;
double r40262 = r40259 * r40261;
double r40263 = r40262 / r40249;
double r40264 = r40247 + r40263;
double r40265 = r40261 + r40257;
double r40266 = r40265 - r40247;
double r40267 = r40251 + r40248;
double r40268 = r40266 / r40267;
double r40269 = r40268 - r40246;
double r40270 = r40269 * r40253;
double r40271 = r40247 * r40259;
double r40272 = r40271 / r40249;
double r40273 = 8.0;
double r40274 = 2.0;
double r40275 = pow(r40247, r40274);
double r40276 = r40273 * r40275;
double r40277 = 12.0;
double r40278 = 4.0;
double r40279 = pow(r40247, r40278);
double r40280 = r40277 * r40279;
double r40281 = 4.0;
double r40282 = 3.0;
double r40283 = pow(r40247, r40282);
double r40284 = r40281 * r40283;
double r40285 = r40280 - r40284;
double r40286 = fma(r40276, r40252, r40285);
double r40287 = r40286 / r40249;
double r40288 = 6.0;
double r40289 = -r40288;
double r40290 = r40251 * r40289;
double r40291 = r40287 + r40290;
double r40292 = fma(r40270, r40272, r40291);
double r40293 = fma(r40247, r40251, r40247);
double r40294 = fma(r40292, r40249, r40293);
double r40295 = r40264 + r40294;
double r40296 = fma(r40250, r40256, r40295);
return r40296;
}



Bits error versus x1



Bits error versus x2
Initial program 0.5
Simplified0.3
rmApplied sub-neg0.3
Applied distribute-lft-in0.3
Simplified0.3
Taylor expanded around 0 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020003 +o rules:numerics
(FPCore (x1 x2)
:name "Rosa's FloatVsDoubleBenchmark"
:precision binary64
(+ 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))))))