\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 \le -4.70669310275382700610447006539516223711 \cdot 10^{-4} \lor \neg \left(b \le 2.006560387622814189967357378918677568436\right):\\
\;\;\;\;\left({a}^{4} + \mathsf{fma}\left(2, {a}^{2} \cdot {b}^{2}, {b}^{4}\right)\right) - 1\\
\mathbf{else}:\\
\;\;\;\;\left({\left(\frac{1}{a}\right)}^{-4} + 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\\
\end{array}double f(double a, double b) {
double r153802 = a;
double r153803 = r153802 * r153802;
double r153804 = b;
double r153805 = r153804 * r153804;
double r153806 = r153803 + r153805;
double r153807 = 2.0;
double r153808 = pow(r153806, r153807);
double r153809 = 4.0;
double r153810 = 1.0;
double r153811 = r153810 + r153802;
double r153812 = r153803 * r153811;
double r153813 = 3.0;
double r153814 = r153813 * r153802;
double r153815 = r153810 - r153814;
double r153816 = r153805 * r153815;
double r153817 = r153812 + r153816;
double r153818 = r153809 * r153817;
double r153819 = r153808 + r153818;
double r153820 = r153819 - r153810;
return r153820;
}
double f(double a, double b) {
double r153821 = b;
double r153822 = -0.0004706693102753827;
bool r153823 = r153821 <= r153822;
double r153824 = 2.006560387622814;
bool r153825 = r153821 <= r153824;
double r153826 = !r153825;
bool r153827 = r153823 || r153826;
double r153828 = a;
double r153829 = 4.0;
double r153830 = pow(r153828, r153829);
double r153831 = 2.0;
double r153832 = pow(r153828, r153831);
double r153833 = pow(r153821, r153831);
double r153834 = r153832 * r153833;
double r153835 = pow(r153821, r153829);
double r153836 = fma(r153831, r153834, r153835);
double r153837 = r153830 + r153836;
double r153838 = 1.0;
double r153839 = r153837 - r153838;
double r153840 = 1.0;
double r153841 = r153840 / r153828;
double r153842 = -4.0;
double r153843 = pow(r153841, r153842);
double r153844 = 4.0;
double r153845 = r153828 * r153828;
double r153846 = r153838 + r153828;
double r153847 = r153845 * r153846;
double r153848 = r153821 * r153821;
double r153849 = 3.0;
double r153850 = r153849 * r153828;
double r153851 = r153838 - r153850;
double r153852 = r153848 * r153851;
double r153853 = r153847 + r153852;
double r153854 = r153844 * r153853;
double r153855 = r153843 + r153854;
double r153856 = r153855 - r153838;
double r153857 = r153827 ? r153839 : r153856;
return r153857;
}



Bits error versus a



Bits error versus b
if b < -0.0004706693102753827 or 2.006560387622814 < b Initial program 0.5
Taylor expanded around inf 3.1
Simplified3.1
if -0.0004706693102753827 < b < 2.006560387622814Initial program 0.1
Taylor expanded around inf 0.4
Final simplification0.9
herbie shell --seed 2019212 +o rules:numerics
(FPCore (a b)
:name "Bouland and Aaronson, Equation (25)"
:precision binary64
(- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (+ (* (* a a) (+ 1 a)) (* (* b b) (- 1 (* 3 a)))))) 1))