\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\begin{array}{l}
\mathbf{if}\;b \cdot b \le 0.8726181648407301816305903230386320501566:\\
\;\;\;\;\left(\left(\left(\left(\left(a \cdot a\right) \cdot \left(b \cdot b\right)\right) \cdot 2 + {a}^{4}\right) + \left(4 \cdot \left(1 + a\right)\right) \cdot \left(a \cdot a\right)\right) + 4 \cdot \left(\left(b \cdot b\right) \cdot \left(1 - a \cdot 3\right)\right)\right) - 1\\
\mathbf{else}:\\
\;\;\;\;\left(\left({b}^{4} + \left(\left(a \cdot a\right) \cdot 2\right) \cdot {b}^{2}\right) + {a}^{4}\right) - 1\\
\end{array}double f(double a, double b) {
double r170354 = a;
double r170355 = r170354 * r170354;
double r170356 = b;
double r170357 = r170356 * r170356;
double r170358 = r170355 + r170357;
double r170359 = 2.0;
double r170360 = pow(r170358, r170359);
double r170361 = 4.0;
double r170362 = 1.0;
double r170363 = r170362 + r170354;
double r170364 = r170355 * r170363;
double r170365 = 3.0;
double r170366 = r170365 * r170354;
double r170367 = r170362 - r170366;
double r170368 = r170357 * r170367;
double r170369 = r170364 + r170368;
double r170370 = r170361 * r170369;
double r170371 = r170360 + r170370;
double r170372 = r170371 - r170362;
return r170372;
}
double f(double a, double b) {
double r170373 = b;
double r170374 = r170373 * r170373;
double r170375 = 0.8726181648407302;
bool r170376 = r170374 <= r170375;
double r170377 = a;
double r170378 = r170377 * r170377;
double r170379 = r170378 * r170374;
double r170380 = 2.0;
double r170381 = r170379 * r170380;
double r170382 = 4.0;
double r170383 = pow(r170377, r170382);
double r170384 = r170381 + r170383;
double r170385 = 4.0;
double r170386 = 1.0;
double r170387 = r170386 + r170377;
double r170388 = r170385 * r170387;
double r170389 = r170388 * r170378;
double r170390 = r170384 + r170389;
double r170391 = 3.0;
double r170392 = r170377 * r170391;
double r170393 = r170386 - r170392;
double r170394 = r170374 * r170393;
double r170395 = r170385 * r170394;
double r170396 = r170390 + r170395;
double r170397 = r170396 - r170386;
double r170398 = pow(r170373, r170382);
double r170399 = 2.0;
double r170400 = r170378 * r170399;
double r170401 = pow(r170373, r170399);
double r170402 = r170400 * r170401;
double r170403 = r170398 + r170402;
double r170404 = r170403 + r170383;
double r170405 = r170404 - r170386;
double r170406 = r170376 ? r170397 : r170405;
return r170406;
}



Bits error versus a



Bits error versus b
Results
if (* b b) < 0.8726181648407302Initial program 0.1
rmApplied distribute-lft-in0.1
Applied associate-+r+0.1
Simplified0.1
Taylor expanded around 0 0.3
Simplified0.3
if 0.8726181648407302 < (* b b) Initial program 0.5
Taylor expanded around inf 2.5
Simplified2.5
Final simplification0.8
herbie shell --seed 2019174
(FPCore (a b)
:name "Bouland and Aaronson, Equation (25)"
(- (+ (pow (+ (* a a) (* b b)) 2.0) (* 4.0 (+ (* (* a a) (+ 1.0 a)) (* (* b b) (- 1.0 (* 3.0 a)))))) 1.0))